101 lines
3.6 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=$(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 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/"