diff --git a/.forgejo/workflows/deploy.yml b/.forgejo/workflows/deploy.yml index aff4c2c..cee1627 100644 --- a/.forgejo/workflows/deploy.yml +++ b/.forgejo/workflows/deploy.yml @@ -25,7 +25,7 @@ jobs: - name: Copy frontend to host pages mount if: github.event_name == 'push' && github.ref == 'refs/heads/main' - uses: http://forgejo:3000/andras/ci-actions/deploy-pages@main - with: - source: frontend - target: fizika + run: | + apt update && apt install -y rsync + mkdir -p /pages + rsync -a --delete frontend/ /pages/fizika diff --git a/.forgejo/workflows/docker-publish.yml b/.forgejo/workflows/docker-publish.yml index c76b35c..a111878 100644 --- a/.forgejo/workflows/docker-publish.yml +++ b/.forgejo/workflows/docker-publish.yml @@ -8,6 +8,9 @@ on: branches: ['main'] workflow_dispatch: +env: + IMAGE_NAME: ${{ forgejo.repository }}/fizika-admin + jobs: build-and-push: runs-on: docker @@ -16,10 +19,45 @@ jobs: - name: Checkout repository uses: https://code.forgejo.org/actions/checkout@v4 - - name: Build and publish admin image - uses: http://forgejo:3000/andras/ci-actions/docker-publish@main - with: - context: ./backend - image-suffix: /fizika-admin - push: ${{ github.event_name != 'pull_request' }} - token: ${{ secrets.FORGEJO_PACKAGE_TOKEN }} + - name: Extract registry host + id: registry + run: echo "host=$(echo '${{ forgejo.server_url }}' | sed 's|https\?://||')" >> "$GITHUB_OUTPUT" + + - name: Log into Forgejo registry + if: forgejo.event_name != 'pull_request' + run: echo "${{ secrets.FORGEJO_PACKAGE_TOKEN }}" | docker login "${{ steps.registry.outputs.host }}" -u "${{ forgejo.actor }}" --password-stdin + + - name: Build Docker image + run: | + IMAGE="${{ steps.registry.outputs.host }}/$(echo "${{ env.IMAGE_NAME }}" | tr '[:upper:]' '[:lower:]')" + SHA_SHORT="$(echo "${{ forgejo.sha }}" | cut -c1-12)" + TAG_ARGS="-t ${IMAGE}:sha-${SHA_SHORT}" + + if [ "${{ forgejo.ref }}" = "refs/heads/main" ]; then + TAG_ARGS="${TAG_ARGS} -t ${IMAGE}:main -t ${IMAGE}:latest" + fi + + if [ "${{ forgejo.ref_type }}" = "tag" ]; then + REF_NAME="${{ forgejo.ref_name }}" + TAG_ARGS="${TAG_ARGS} -t ${IMAGE}:${REF_NAME}" + + if echo "$REF_NAME" | grep -Eq '^v[0-9]+\.[0-9]+\.[0-9]+$'; then + VERSION="${REF_NAME#v}" + MAJOR_MINOR="$(echo "$VERSION" | cut -d. -f1,2)" + MAJOR="$(echo "$VERSION" | cut -d. -f1)" + TAG_ARGS="${TAG_ARGS} -t ${IMAGE}:${VERSION} -t ${IMAGE}:${MAJOR_MINOR} -t ${IMAGE}:${MAJOR}" + fi + fi + + docker build \ + --label "org.opencontainers.image.source=${{ forgejo.server_url }}/${{ forgejo.repository }}" \ + --label "org.opencontainers.image.revision=${{ forgejo.sha }}" \ + --label "org.opencontainers.image.created=$(date -u +'%Y-%m-%dT%H:%M:%SZ')" \ + ${TAG_ARGS} \ + ./backend + + echo "IMAGE=${IMAGE}" >> "$GITHUB_ENV" + + - name: Push Docker image + if: forgejo.event_name != 'pull_request' + run: docker push --all-tags "$IMAGE"