Add Release scripts #1
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Create and publish a Container image | |
on: | |
push: | |
branches: | |
- master # Trigger the workflow on push to the master branch | |
tags: | |
- 'v*' # Trigger the workflow on tags like v1.0.0, v2.0.0, etc. | |
pull_request: | |
branches: | |
- master # Trigger workflow when a PR targets the master branch | |
permissions: | |
contents: read | |
packages: write | |
id-token: write | |
# Defines two custom environment variables for the workflow. These are used for the Container registry domain, and a name for the Docker image that this workflow builds. | |
env: | |
REGISTRY: ghcr.io | |
IMAGE_NAME: ${{ github.repository }} | |
jobs: | |
build-and-push-image: | |
runs-on: ubuntu-latest | |
permissions: | |
contents: read | |
packages: write | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
# Logs in to the Container registry using GitHub token | |
- name: Log in to the Container registry | |
uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1 | |
with: | |
registry: ${{ env.REGISTRY }} | |
username: ${{ github.actor }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
# Extract metadata (tags, labels) for Docker | |
- name: Extract metadata (tags, labels) for Docker | |
id: meta | |
uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7 | |
with: | |
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} | |
# Build and push Docker image | |
- name: Build and push Docker image | |
uses: docker/build-push-action@f2a1d5e99d037542a71f64918e516c093c6f3fc4 | |
with: | |
context: . | |
push: true | |
# Tags the image as 'latest' only for master branch, versioned tags for versioned pushes, and PR-specific tags | |
tags: | | |
# Version tags for releases | |
${{ steps.meta.outputs.tags }} | |
# Latest tag for master branch only | |
${{ github.ref == 'refs/heads/master' && env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest | |
# PR-specific tag (only applies during PR events) | |
${{ github.event_name == 'pull_request' && env.REGISTRY }}/${{ env.IMAGE_NAME }}:pr-${{ github.event.pull_request.number }} | |
# Commit SHA for PR builds for more precise versioning | |
${{ github.event_name == 'pull_request' && env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.sha }} | |
labels: ${{ steps.meta.outputs.labels }} |