name: Docker Image CI
on:
push:
branches: [master]
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
build:
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- uses: actions/checkout@v5
- name: Set variables
id: vars
run: |
echo "package_name=$(sed -En 's/name[[:space:]]*=[[:space:]]*"([^"]+)"/\1/p' Cargo.toml | head -1)" >> $GITHUB_OUTPUT
echo "package_version=$(sed -En 's/version[[:space:]]*=[[:space:]]*"([^"]+)"/\1/p' Cargo.toml | head -1)" >> $GITHUB_OUTPUT
echo "dockerhub_org=${{ github.repository_owner }}" >> $GITHUB_OUTPUT
- name: Display variables
run: |
echo "Package: ${{ steps.vars.outputs.package_name }}"
echo "Version: ${{ steps.vars.outputs.package_version }}"
echo "Org: ${{ steps.vars.outputs.dockerhub_org }}"
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Log in to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_TOKEN }}
- name: Prepare Docker context
run: mv docker/.dockerignore .dockerignore
- name: Build and push Docker image
uses: docker/build-push-action@v5
with:
context: .
file: docker/Dockerfile
push: true
tags: |
${{ steps.vars.outputs.dockerhub_org }}/${{ steps.vars.outputs.package_name }}:${{ steps.vars.outputs.package_version }}
${{ steps.vars.outputs.dockerhub_org }}/${{ steps.vars.outputs.package_name }}:latest
cache-from: type=gha
cache-to: type=gha,mode=max