name: Release & Deploy on: schedule: - cron: '0 * * * *' workflow_dispatch: env: GITEA_URL: https://git.example.com REPO_PATH: /home/user/repos/NewsArchiverV2 DEPLOY_SCRIPT: /home/user/deploy/deploy.sh 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: | if [ ! -f version.json ]; then echo "ERROR: version.json not found" exit 1 fi MAJOR=$(jq -r '.major' version.json) MINOR=$(jq -r '.minor' version.json) PATCH=$(jq -r '.patch' version.json) VERSION="${MAJOR}.${MINOR}.${PATCH}" PATCH_PADDED=$(printf "%03d" "$PATCH") FULL_VERSION="${MAJOR}.${MINOR}.${PATCH_PADDED}" echo "major=$MAJOR" >> $GITHUB_OUTPUT echo "minor=$MINOR" >> $GITHUB_OUTPUT echo "patch=$PATCH" >> $GITHUB_OUTPUT echo "patch_padded=$PATCH_PADDED" >> $GITHUB_OUTPUT echo "version=$FULL_VERSION" >> $GITHUB_OUTPUT echo "Current version: $FULL_VERSION" - 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: -f1 | tr -d ' ') 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 echo "New version $CURRENT_VERSION needs deployment" - name: Increment patch and create release branch if: steps.check.outputs.skip != 'true' id: bump run: | MAJOR=$(jq -r '.major' version.json) MINOR=$(jq -r '.minor' version.json) PATCH=$(jq -r '.patch' version.json) NEW_PATCH=$((PATCH + 1)) PATCH_PADDED=$(printf "%03d" "$NEW_PATCH") RELEASE_VERSION="${MAJOR}.${MINOR}.${PATCH_PADDED}" RELEASE_BRANCH="release/v${RELEASE_VERSION}" # Update version.json jq --argjson p "$NEW_PATCH" '.patch = $p' version.json > version_new.json mv version_new.json version.json # Commit and push release branch git config user.email "bot@example.com" git config user.name "CI Release Bot" git checkout -b "$RELEASE_BRANCH" git add version.json git commit -m "release: bump to $RELEASE_VERSION" git push origin "$RELEASE_BRANCH" 2>/dev/null || { echo "Failed to push release branch" exit 1 } # Create tag git tag "v${RELEASE_VERSION}" git push origin "v${RELEASE_VERSION}" 2>/dev/null || true echo "release_version=$RELEASE_VERSION" >> $GITHUB_OUTPUT echo "release_branch=$RELEASE_BRANCH" >> $GITHUB_OUTPUT echo "Created release: $RELEASE_VERSION on branch $RELEASE_BRANCH" - name: Deploy if: steps.check.outputs.skip != 'true' run: | IMAGE_NAME="newsarchiver" RELEASE_VERSION="${{ steps.bump.outputs.release_version }}" IMAGE_TAG="${IMAGE_NAME}:${RELEASE_VERSION}" echo "Deploying $IMAGE_TAG from $REPO_PATH" bash "$DEPLOY_SCRIPT" newsarchiver "$REPO_PATH" "$IMAGE_TAG" "http://127.0.0.1:5000/"