Skip to content

GHCR Changes

GHCR Changes #169

# This is a basic workflow to help you get started with Actions
name: Docker Build and Publish
# Controls when the action will run. Triggers the workflow on push or pull request
# events but only for the main branch
on:
schedule:
- cron: '0 0 * * *' # Nightly build
pull_request:
branches: [ master ]
push:
branches: [ master ]
workflow_dispatch:
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
build_and_push:
name: Build, tag, and push images
env:
default_python: "3.12"
strategy:
fail-fast: true
matrix:
python_images: ["3.8","3.9","3.10","3.11","3.12"]
# The type of runner that the job will run on
runs-on: ubuntu-latest
# Steps represent a sequence of tasks that will be executed as part of the job
steps:
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
-
uses: actions/checkout@v4
-
name: Set up QEMU
uses: docker/setup-qemu-action@v3
-
name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
-
name: Inspect builder
run: |
echo "Name: ${{ steps.buildx.outputs.name }}"
echo "Endpoint: ${{ steps.buildx.outputs.endpoint }}"
echo "Status: ${{ steps.buildx.outputs.status }}"
echo "Flags: ${{ steps.buildx.outputs.flags }}"
echo "Platforms: ${{ steps.buildx.outputs.platforms }}"
-
name: Get sopel version
uses: HardNorth/[email protected]
with:
version-source: file
version-file: Dockerfile
version-file-extraction-pattern: '(?<=SOPEL_BRANCH=v).+'
-
name: Docker meta
id: meta-default
uses: docker/metadata-action@v5
if: matrix.python_images == env.default_python
with:
images: |
${{ vars.DOCKER_HUB_IMAGE_NAME }}
ghcr.io/${{ github.repository_owner }}/sopel
flavor: |
latest=true
tags: |
# Python full version
type=semver,pattern={{version}},value=v${{ env.RELEASE_VERSION }},suffix=-py${{ matrix.python_images }}
type=semver,pattern={{major}}.{{minor}},value=v${{ env.RELEASE_VERSION }},suffix=-py${{ matrix.python_images }}
type=semver,pattern={{major}},value=v${{ env.RELEASE_VERSION }},suffix=-py${{ matrix.python_images }}
# Python 3
type=semver,pattern={{major}},value=v${{ env.RELEASE_VERSION }},suffix=-py3
type=semver,pattern={{major}}.{{minor}},value=v${{ env.RELEASE_VERSION }},suffix=-py3
type=semver,pattern={{version}},value=v${{ env.RELEASE_VERSION }},suffix=-py3
# Version only
type=semver,pattern={{major}},value=v${{ env.RELEASE_VERSION }}
type=semver,pattern={{major}}.{{minor}},value=v${{ env.RELEASE_VERSION }}
type=semver,pattern={{version}},value=v${{ env.RELEASE_VERSION }}
type=ref,event=branch
-
name: Docker meta
id: meta-alt-python
uses: docker/metadata-action@v5
if: matrix.python_images != env.default_python
with:
images: |
${{ vars.DOCKER_HUB_IMAGE_NAME }}
ghcr.io/${{ github.repository_owner }}/sopel
flavor: |
latest=false
suffix=-py${{ matrix.python_images }}
tags: |
# Python full version
type=semver,pattern={{version}},value=v${{ env.RELEASE_VERSION }}
type=semver,pattern={{major}}.{{minor}},value=v${{ env.RELEASE_VERSION }}
type=semver,pattern={{major}},value=v${{ env.RELEASE_VERSION }}
-
name: Login to Docker Hub
uses: docker/login-action@v3
if: github.event_name != 'pull_request'
with:
username: ${{ secrets.DOCKER_HUB_USERNAME }}
password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
-
name: Login to GitHub Container Registry
uses: docker/login-action@v3
if: github.event_name != 'pull_request'
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
-
name: Build SOPEL for ${{ matrix.python_images }}
uses: docker/build-push-action@v5
if: github.event_name != 'schedule'
with:
context: .
file: ./Dockerfile
build-args: PYTHON_TAG=${{ matrix.python_images }}-alpine
platforms: linux/amd64,linux/arm64,linux/arm/v7,linux/arm/v6,linux/s390x
push: ${{ github.event_name != 'pull_request' }}
tags: ${{ steps.meta-default.outputs.tags }}${{ steps.meta-alt-python.outputs.tags }}
labels: ${{ steps.meta-default.outputs.labels }}${{ steps.meta-alt-python.outputs.labels }}
-
name: Build Nightly SOPEL for ${{ matrix.python_images }}
uses: docker/build-push-action@v5
if: github.event_name == 'schedule' && matrix.python_images == env.default_python
with:
context: .
file: ./Dockerfile
build-args: |
PYTHON_TAG=${{ matrix.python_images }}-alpine
SOPEL_BRANCH=master
platforms: linux/amd64,linux/arm64,linux/arm/v7,linux/arm/v6,linux/s390x
push: ${{ github.event_name != 'pull_request' }}
tags: ${{ vars.DOCKER_HUB_IMAGE_NAME }}:nightly,ghcr.io/${{ github.repository_owner }}/sopel:nightly
labels: ${{ steps.meta-default.outputs.labels }}${{ steps.meta-alt-python.outputs.labels }}