102 lines
3.5 KiB
YAML

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: |
MAJOR=$(jq -r '.major' version.json)
MINOR=$(jq -r '.minor' version.json)
PATCH=$(jq -r '.patch' version.json)
PATCH_PADDED=$(printf "%03d" "$PATCH")
FULL_VERSION="${MAJOR}.${MINOR}.${PATCH_PADDED}"
echo "version=$FULL_VERSION" >> $GITHUB_OUTPUT
- 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)
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: |
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}"
jq --argjson p "$NEW_PATCH" '.patch = $p' version.json > version_new.json
mv version_new.json version.json
git config user.email "bot@example.com"
git config user.name "CI Release Bot"
git add version.json
git commit -m "release: bump to $RELEASE_VERSION"
git push origin main
git tag -a "v${RELEASE_VERSION}" -m "release: $RELEASE_VERSION"
git push origin "v${RELEASE_VERSION}"
echo "release_version=$RELEASE_VERSION" >> $GITHUB_OUTPUT
- name: Login to Gitea Registry
if: steps.check.outputs.skip != 'true'
run: |
echo "${{ secrets.GITEA_REGISTRY_PASSWORD }}" | \
docker login --username jarianc --password-stdin ${{ env.REGISTRY }} 2>&1 || \
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/"