From baaaa91ae139b2fe732d98ef7552e55bb6eebe61 Mon Sep 17 00:00:00 2001 From: yangbin Date: Sun, 8 Sep 2024 14:46:27 +0800 Subject: [PATCH] feat(beancount): add fava docker build workflow Signed-off-by: yangbin --- .github/workflows/fava-docker-build.yml | 106 ++++++++++++++++++++++++ beancount/fava/Dockerfile | 16 ++++ beancount/fava/requirements.txt | 4 + 3 files changed, 126 insertions(+) create mode 100644 .github/workflows/fava-docker-build.yml create mode 100644 beancount/fava/Dockerfile create mode 100644 beancount/fava/requirements.txt diff --git a/.github/workflows/fava-docker-build.yml b/.github/workflows/fava-docker-build.yml new file mode 100644 index 0000000..6799524 --- /dev/null +++ b/.github/workflows/fava-docker-build.yml @@ -0,0 +1,106 @@ +name: "Build fava Docker image" + +on: + workflow_dispatch: + push: + branches: + - master + paths: + - 'beancount/fava/**' + - '.github/workflows/fava-docker-build.yml' + schedule: + - cron: '30 22 * * 5' # See https://crontab.guru/#0_3_*_*_* + +env: + REPOSITORY_NAME: ${{ github.repository }} + GHCR_IMAGE_NAME: ghcr.io/y0ngb1n/dockerized/fava + DOCKERHUB_IMAGE_NAME: y0ngb1n/fava + +jobs: + build: + runs-on: ubuntu-latest + if: github.repository == 'y0ngb1n/dockerized' + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + persist-credentials: false + fetch-depth: 0 + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + - name: Login to GitHub Container Registry + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + - name: Login to Docker Hub + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + - name: Fetch fava version + id: get_fava_version + run: | + export TZ='Asia/Shanghai' + echo "build_date=$(date '+%Y-%m-%d-%H-%M-%S')" >> $GITHUB_OUTPUT + local_version=v`sed -nr 's/ARG FAVA_VERSION="(.*)"/\1/p' beancount/fava/Dockerfile` + latest_version=$(curl -sSL -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" \ + https://api.github.com/repos/beancount/fava/tags | jq -r '.[0].name') + if [ "$local_version" != "$latest_version" ]; then + echo "fava_version=$latest_version" >> $GITHUB_OUTPUT + echo "fava_latest_version=$latest_version" >> $GITHUB_ENV + echo "fava_pip_version=$(echo $latest_version | sed 's/v//g')" >> $GITHUB_ENV + fi + - name: Build and push Docker images + uses: docker/build-push-action@v6 + if: steps.get_fava_version.outputs.fava_version != '' + with: + context: beancount/fava + file: ./beancount/fava/Dockerfile + builder: ${{ steps.buildx.outputs.name }} + platforms: linux/arm64,linux/amd64 + build-args: | + FAVA_PIP_VERSION=$fava_pip_version + push: true + tags: | + ${{ env.GHCR_IMAGE_NAME }}:${{ steps.get_fava_version.outputs.fava_version }} + ${{ env.GHCR_IMAGE_NAME }}:latest + ${{ env.DOCKERHUB_IMAGE_NAME }}:${{ steps.get_fava_version.outputs.fava_version }} + ${{ env.DOCKERHUB_IMAGE_NAME }}:latest + cache-from: type=gha + cache-to: type=gha,mode=max + - name: Update fava version + if: steps.get_fava_version.outputs.fava_version != '' + run: | + sed -i 's/FAVA_PIP_VERSION="[^"]*"/FAVA_PIP_VERSION="'"$fava_pip_version"'"/g' beancount/fava/Dockerfile + - name: Commit changes + if: steps.get_fava_version.outputs.fava_version != '' + run: | + git config --local user.email "github-actions[bot]@users.noreply.github.com" + git config --local user.name "github-actions[bot]" + git add -A + + arr[0]="😂" + arr[1]="😱" + arr[2]="👿" + arr[3]="💩" + arr[4]="🙏" + arr[5]="🙈" + arr[6]="🐐" + arr[7]="🤖" + arr[8]="🪿" + arr[9]="👻" + + rand=$[$RANDOM % ${#arr[@]}] + + git commit -m "chore(bot): ${arr[$rand]} update fava version to ${{ steps.get_fava_version.outputs.fava_version }}" + - name: Push changes + uses: ad-m/github-push-action@master + # uses: actions-js/push@master + if: steps.get_fava_version.outputs.fava_version != '' + with: + directory: "beancount/fava" + github_token: ${{ secrets.GITHUB_TOKEN }} diff --git a/beancount/fava/Dockerfile b/beancount/fava/Dockerfile new file mode 100644 index 0000000..5a0146f --- /dev/null +++ b/beancount/fava/Dockerfile @@ -0,0 +1,16 @@ +# https://github.com/yegle/fava-docker +# https://github.com/swissmanu/docker-fava + +FROM bitnami/python:3.12-debian-12 + +ARG FAVA_PIP_VERSION="1.27.3" +ENV FAVA_PIP_VERSION=$FAVA_PIP_VERSION \ + FAVA_HOST="0.0.0.0" \ + BEANCOUNT_FILE="/ledger/main.beancount" + +EXPOSE 5000 +ENTRYPOINT [ "fava" ] + +COPY requirements.txt . +RUN pip3 install fava==$FAVA_PIP_VERSION \ + && pip3 install -r requirements.txt diff --git a/beancount/fava/requirements.txt b/beancount/fava/requirements.txt new file mode 100644 index 0000000..a60d1f8 --- /dev/null +++ b/beancount/fava/requirements.txt @@ -0,0 +1,4 @@ +# https://github.com/dallaslu/beancount-periodic +beancount-periodic==0.1.2 +# https://github.com/andreasgerstmayr/fava-dashboards +# https://github.com/polarmutex/fava-envelope \ No newline at end of file