From 2c91d940a6b1b9ae9a7ced8c64eb3e6bba094858 Mon Sep 17 00:00:00 2001 From: Emil Lerch Date: Fri, 10 Jan 2025 14:48:59 -0800 Subject: [PATCH] initial commit --- .gitea/workflows/build.yaml | 92 ++++++++++++++++++++++++++++++++++++ Dockerfile | 41 ++++++++++++++++ LICENSE | 21 ++++++++ README.md | 8 ++++ chawan.desktop | 7 +++ icon.png | Bin 0 -> 19330 bytes 6 files changed, 169 insertions(+) create mode 100644 .gitea/workflows/build.yaml create mode 100644 Dockerfile create mode 100644 LICENSE create mode 100644 README.md create mode 100644 chawan.desktop create mode 100644 icon.png diff --git a/.gitea/workflows/build.yaml b/.gitea/workflows/build.yaml new file mode 100644 index 0000000..e377f25 --- /dev/null +++ b/.gitea/workflows/build.yaml @@ -0,0 +1,92 @@ +name: AppImage Build +on: + workflow_dispatch: + schedule: + - cron: '30 11 * * *' # 11:30 UTC, 3:30AM Pacific + push: + branches: + - '*' +env: + ACTIONS_RUNTIME_TOKEN: ${{ secrets.GITHUB_TOKEN }} + ACTIONS_RUNTIME_URL: ${{ env.GITHUB_SERVER_URL }}/api/actions_pipeline/ +jobs: + build-appimage: + runs-on: ubuntu-latest + steps: + - name: Check out repository code + uses: actions/checkout@v4 + - name: Checkout upstream + run: | + git clone --depth=1 https://git.sr.ht/~bptato/chawan + - name: Upstream version + id: upstream-version + run: | + echo "version=$(git rev-parse HEAD)" >> $GITHUB_OUTPUT + - name: Check for pre-existing build + id: cache + uses: actions/cache/restore@v4 + with: + lookup-only: true + key: ${{ steps.upstream-version.outputs.version }} + - name: Build AppImage + id: build + if: steps.cache.outputs.cache-hit != 'true' + run: | + apt-get update + apt-get install -y --no-install-recommends \ + ca-certificates \ + curl \ + libssh2-1-dev \ + libcurl4-openssl-dev \ + pkg-config \ + make \ + ncurses-base \ + xz-utils \ + gcc \ + git \ + file + curl https://nim-lang.org/choosenim/init.sh -OsSf + chmod 755 ./init.sh + ./init.sh -y + export PATH=$HOME/.nimble/bin:$PATH + cd chawan + make submodule + make + rm -rf /usr/local/* + make install + mkdir -p AppDir/usr + cp -R /usr/local/* AppDir/usr + sed -i -e 's#/usr#././#g' AppDir/usr/bin/cha + curl -sLO https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-x86_64.AppImage + chmod 755 appimagetool-x86_64.AppImage + ./appimagetool-x86_64.AppImage --appimage-extract + cp squashfs-root/usr/bin/* /usr/local/bin/ + cp chawan.desktop AppDir + cp icon.png AppDir + cd AppDir + ln -s usr/bin/cha AppRun + cd .. + appimagetool AppDir + mv Chawan-x86_64.AppImage "Chawan-x86_64-$(git rev-parse --short HEAD).AppImage" + echo "filename=Chawan-x86_64-$(git rev-parse --short HEAD).AppImage" >> $GITHUB_OUTPUT + - name: Publish AppImage + if: steps.cache.outputs.cache-hit != 'true' + run: | + curl --user ${{ github.actor }}:${{ secrets.PACKAGE_PUSH }} \ + --upload-file ${{ runner.temp }}/${{ steps.build.outputs.filename }} \ + https://git.lerch.org/api/packages/lobo/generic/chawan-appimage/${{ steps.build.outputs.filename }} + - name: Save build + if: steps.cache.outputs.cache-hit != 'true' + uses: actions/cache/save@v4 + with: + path: | + ${{ steps.build.outputs.filename }} + key: ${{ steps.cache.outputs.cache-primary-key }} + - name: Notify + uses: https://git.lerch.org/lobo/action-notify-ntfy@v2 + if: failure() + with: + host: ${{ secrets.NTFY_HOST }} + topic: ${{ secrets.NTFY_TOPIC }} + user: ${{ secrets.NTFY_USER }} + password: ${{ secrets.NTFY_PASSWORD }} diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..4fd83e9 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,41 @@ +FROM debian:bookworm-slim +LABEL maintainer "Emil Lerch " + +RUN apt-get update && apt-get install -y --no-install-recommends \ + ca-certificates \ + curl \ + libssh2-1-dev \ + libcurl4-openssl-dev \ + pkg-config \ + make \ + ncurses-base \ + xz-utils \ + gcc \ + git \ + && curl https://nim-lang.org/choosenim/init.sh -OsSf \ + && chmod 755 ./init.sh \ + && ./init.sh -y \ + && export PATH=$HOME/.nimble/bin:$PATH \ + && git clone --depth=1 https://git.sr.ht/~bptato/chawan \ + && cd chawan \ + && make submodule \ + && make \ + && make install \ + && mkdir -p /AppDir/usr \ + && cp -R /usr/local/* /AppDir/usr \ + && sed -i -e 's#/usr#././#g' /AppDir/usr/bin/cha \ + && curl -sLO https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-x86_64.AppImage \ + && chmod 755 appimagetool-x86_64.AppImage \ + && ./appimagetool-x86_64.AppImage --appimage-extract \ + && cp squashfs-root/usr/bin/* /usr/local/bin/ \ + && apt-get install -y file \ + && cd /AppDir \ + && ln -s usr/bin/cha AppRun + +COPY chawan.desktop /AppDir/ +COPY icon.png /AppDir/ + +RUN appimagetool /AppDir + +# /Chawan-x86_64.AppImage +#ENTRYPOINT [ "aws" ] diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..506dadd --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2025 Emil Lerch + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..10484dc --- /dev/null +++ b/README.md @@ -0,0 +1,8 @@ +AppImage Builder for Chawan Web Browser +======================================= + +This builds AppImages for [Chawan](https://sr.ht/~bptato/chawan/). Images are published in the packages directory. + +A dockerfile used for testing is in the root directory, but the real work is done as a GitHub action. + +The icon is just some public domain thing as the project has no icon. diff --git a/chawan.desktop b/chawan.desktop new file mode 100644 index 0000000..118dc65 --- /dev/null +++ b/chawan.desktop @@ -0,0 +1,7 @@ +[Desktop Entry] +Name=Chawan +Exec=cha +Icon=icon +Type=Application +Categories=Network +Terminal=true diff --git a/icon.png b/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..f2d8c195544ab6390cae6aaf3d556c8d114d15cf GIT binary patch literal 19330 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 literal 0 HcmV?d00001