Skip to content

Docker Image CI

Docker Image CI #1

Workflow file for this run

name: Docker Image CI
on:
schedule:
- cron: "0 0 * * *"
workflow_dispatch:
push:
branches: [ "master" ]
paths-ignore:
- '**/README.md'
- 'Ubuntu/**'
- '.github/**'
- '.gitattributes'
- '.gitignore'
jobs:
build-and-push:
runs-on: ubuntu-latest
steps:
-
name: Checkout
uses: actions/checkout@v4
-
name: Set up QEMU
uses: docker/setup-qemu-action@v3
with:
platforms: 'all'
-
name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
-
name: Extract version from main.py
run: |
VERSION=$(grep -Po "(?<=version = ')[^']+" main.py)
echo "VERSION=$VERSION" >> $GITHUB_ENV
echo "Extracted version is $VERSION"
-
name: Set environment variables
run: |
echo "REPO_OWNER_LOWER=$(echo ${{ github.repository_owner }} | tr '[:upper:]' '[:lower:]')" >> $GITHUB_ENV
echo "REPO_NAME=$(echo ${{ github.repository }} | cut -d'/' -f2)" >> $GITHUB_ENV
-
name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
-
name: Login to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
-
name: Build and push to Docker Hub and GitHub Registry
uses: docker/build-push-action@v5
with:
context: .
file: ./Dockerfile
platforms: linux/amd64,linux/arm64,linux/arm/v7
push: true
tags: |
${{ secrets.DOCKER_USERNAME }}/${{ env.REPO_NAME }}:${{ env.VERSION }}
${{ secrets.DOCKER_USERNAME }}/${{ env.REPO_NAME }}:latest
ghcr.io/${{ env.REPO_OWNER_LOWER }}/${{ env.REPO_NAME }}:${{ env.VERSION }}
ghcr.io/${{ env.REPO_OWNER_LOWER }}/${{ env.REPO_NAME }}:latest
-
name: Check if Release Exists
id: check_release
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
if gh release view ${{ env.VERSION }} --repo ${{ github.repository }}; then
echo "Release already exists for version ${{ env.VERSION }}"
echo "release_exists=true" >> $GITHUB_ENV
else
echo "Release does not exist for version ${{ env.VERSION }}"
echo "release_exists=false" >> $GITHUB_ENV
fi
-
name: Create Release with CHANGELOG Notes
if: env.release_exists == 'false'
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
RELEASE_NOTES=$(awk '/^## Version \[${{ env.VERSION }}\]/ {flag=1; next} /^## Version \[/ {flag=0} flag' CHANGELOG.md)
gh release create ${{ env.VERSION }} \
--repo ${{ github.repository }} \
--title "Release ${{ env.VERSION }}" \
--notes "$RELEASE_NOTES" \
--draft=false \
--prerelease=false