104 lines
3.7 KiB
YAML

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/"