name: Release & Deploy on: schedule: - cron: '0 * * * *' workflow_dispatch: env: GITEA_URL: https://git.example.com REGISTRY: git.example.com DEPLOY_SCRIPT: /home/user/deploy/deploy.sh IMAGE_NAME: newsarchiver jobs: release: runs-on: ubuntu-latest steps: - name: Clone repo run: | rm -rf $GITHUB_WORKSPACE/* git clone --depth 1 $GITEA_URL/$GITHUB_REPOSITORY $GITHUB_WORKSPACE git -C $GITHUB_WORKSPACE checkout main - name: Read version id: version run: | python3 -c " import json, sys with open('version.json') as f: v = json.load(f) patch_padded = f\"{v['patch']:03d}\" full = f\"{v['major']}.{v['minor']}.{patch_padded}\" with open('$GITHUB_OUTPUT', 'a') as out: out.write(f'version={full}\n') print(f'Current version: {full}') " - name: Check if deploy needed id: check run: | VERSION_FILE="/home/user/deploy/deployed/newsarchiver.version" CURRENT_VERSION="${{ steps.version.outputs.version }}" if [ -f "$VERSION_FILE" ]; then DEPLOYED_VERSION=$(cat "$VERSION_FILE" | cut -d: -f2) echo "Deployed: $DEPLOYED_VERSION" if [ "$CURRENT_VERSION" = "$DEPLOYED_VERSION" ]; then echo "skip=true" >> $GITHUB_OUTPUT echo "No new version to deploy" exit 0 fi fi echo "skip=false" >> $GITHUB_OUTPUT - name: Bump patch version if: steps.check.outputs.skip != 'true' id: bump run: | python3 -c " import json with open('version.json') as f: v = json.load(f) v['patch'] += 1 patch_padded = f\"{v['patch']:03d}\" full = f\"{v['major']}.{v['minor']}.{patch_padded}\" with open('version.json', 'w') as f: json.dump(v, f, indent=2) print(f'version={full}') print(f'::set-output name=release_version::{full}') print(f'Bumped to {full}') " git config user.email "bot@example.com" git config user.name "CI Release Bot" git add version.json git commit -m "release: bump to ${{ steps.bump.outputs.release_version }}" git push origin main git tag -a "v${{ steps.bump.outputs.release_version }}" -m "release: ${{ steps.bump.outputs.release_version }}" git push origin "v${{ steps.bump.outputs.release_version }}" - name: Login to Gitea Registry if: steps.check.outputs.skip != 'true' run: | echo "REDACTED" | docker login --username jarianc --password-stdin ${{ env.REGISTRY }} - name: Build & Push to Registry if: steps.check.outputs.skip != 'true' id: build run: | TAG="${{ steps.bump.outputs.release_version }}" REGISTRY_IMAGE="${{ env.REGISTRY }}/${{ github.repository_owner }}/${{ env.IMAGE_NAME }}:${TAG}" LATEST_IMAGE="${{ env.REGISTRY }}/${{ github.repository_owner }}/${{ env.IMAGE_NAME }}:latest" docker build -t "$REGISTRY_IMAGE" . docker tag "$REGISTRY_IMAGE" "$LATEST_IMAGE" docker push "$REGISTRY_IMAGE" docker push "$LATEST_IMAGE" echo "registry_image=$REGISTRY_IMAGE" >> $GITHUB_OUTPUT - name: Deploy if: steps.check.outputs.skip != 'true' run: | REGISTRY_IMAGE="${{ steps.build.outputs.registry_image }}" bash "$DEPLOY_SCRIPT" newsarchiver "$REGISTRY_IMAGE" "http://127.0.0.1:5000/"