name: Release & Deploy on: schedule: - cron: '0 2 * * *' 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 https://user:pass@git.example.com/${{ github.repository }} $GITHUB_WORKSPACE git -C $GITHUB_WORKSPACE checkout main - name: Read version id: version run: | MAJOR=$(grep '"major"' version.json | sed 's/.*: *//; s/[^0-9]//g') MINOR=$(grep '"minor"' version.json | sed 's/.*: *//; s/[^0-9]//g') PATCH=$(grep '"patch"' version.json | sed 's/.*: *//; s/[^0-9]//g') PATCH_PADDED=$(printf "%03d" "$PATCH") FULL="${MAJOR}.${MINOR}.${PATCH_PADDED}" echo "version=${FULL}" >> $GITHUB_OUTPUT echo "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: | PATCH=$(grep '"patch"' version.json | sed 's/.*: *//; s/[^0-9]//g') NEW_PATCH=$((PATCH + 1)) PATCH_PADDED=$(printf "%03d" "$NEW_PATCH") MAJOR=$(grep '"major"' version.json | sed 's/.*: *//; s/[^0-9]//g') MINOR=$(grep '"minor"' version.json | sed 's/.*: *//; s/[^0-9]//g') FULL="${MAJOR}.${MINOR}.${PATCH_PADDED}" sed -i "s/\"patch\": ${PATCH}/\"patch\": ${NEW_PATCH}/" version.json echo "release_version=${FULL}" >> $GITHUB_OUTPUT echo "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 ${FULL}" git remote set-url origin https://user:pass@git.example.com/${{ github.repository }} git push origin main git tag -a "v${FULL}" -m "release: ${FULL}" git push origin "v${FULL}" - 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/"