107 lines
3.6 KiB
YAML
107 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: |
|
|
python3 -c "
|
|
import json, sys
|
|
with open('version.json') as f:
|
|
v = json.load(f)
|
|
patch_padded = f\"{v['patch']:03d}\"
|
|
full = f\"{v['major']}.{v['minor']}.{patch_padded}\"
|
|
with open('$GITHUB_OUTPUT', 'a') as out:
|
|
out.write(f'version={full}\n')
|
|
print(f'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: |
|
|
python3 -c "
|
|
import json
|
|
with open('version.json') as f:
|
|
v = json.load(f)
|
|
v['patch'] += 1
|
|
patch_padded = f\"{v['patch']:03d}\"
|
|
full = f\"{v['major']}.{v['minor']}.{patch_padded}\"
|
|
with open('version.json', 'w') as f:
|
|
json.dump(v, f, indent=2)
|
|
print(f'version={full}')
|
|
print(f'::set-output name=release_version::{full}')
|
|
print(f'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 ${{ steps.bump.outputs.release_version }}"
|
|
git push origin main
|
|
|
|
git tag -a "v${{ steps.bump.outputs.release_version }}" -m "release: ${{ steps.bump.outputs.release_version }}"
|
|
git push origin "v${{ steps.bump.outputs.release_version }}"
|
|
|
|
- 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/"
|