mirror of
https://github.com/agessaman/meshcore-bot.git
synced 2026-04-27 03:15:19 +00:00
7bc4efff31
- Modified the Dockerfile to set ownership of copied files directly during the copy operation, enhancing file permissions management. - Updated the GitHub Actions workflow to limit the build platforms to linux/arm64 and linux/arm/v7, streamlining the build process for specific architectures. These changes improve the efficiency and reliability of the Docker image build process.
95 lines
2.9 KiB
YAML
95 lines
2.9 KiB
YAML
name: Build and Push Docker Image
|
|
|
|
on:
|
|
push:
|
|
branches:
|
|
- main
|
|
- master
|
|
- dev
|
|
tags:
|
|
- 'v*'
|
|
pull_request:
|
|
branches:
|
|
- main
|
|
- master
|
|
- dev
|
|
workflow_dispatch:
|
|
|
|
env:
|
|
REGISTRY: ghcr.io
|
|
IMAGE_NAME: ${{ github.repository }}
|
|
|
|
jobs:
|
|
build:
|
|
runs-on: ubuntu-latest
|
|
permissions:
|
|
contents: read
|
|
packages: write
|
|
|
|
steps:
|
|
- name: Checkout repository
|
|
uses: actions/checkout@v4
|
|
|
|
# QEMU is required for cross-platform builds (arm64, arm/v7).
|
|
# Without it, BuildKit cannot emulate non-native architectures.
|
|
- name: Set up QEMU
|
|
uses: docker/setup-qemu-action@v3
|
|
with:
|
|
platforms: linux/arm64,linux/arm/v7
|
|
|
|
- name: Set up Docker Buildx
|
|
uses: docker/setup-buildx-action@v3
|
|
|
|
- name: Log in to Container Registry
|
|
if: github.event_name != 'pull_request'
|
|
uses: docker/login-action@v3
|
|
with:
|
|
registry: ${{ env.REGISTRY }}
|
|
username: ${{ github.actor }}
|
|
password: ${{ secrets.GITHUB_TOKEN }}
|
|
|
|
- name: Extract metadata (tags, labels) for Docker
|
|
id: meta
|
|
uses: docker/metadata-action@v5
|
|
with:
|
|
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
|
|
tags: |
|
|
type=ref,event=branch
|
|
type=ref,event=pr
|
|
type=semver,pattern={{version}}
|
|
type=semver,pattern={{major}}.{{minor}}
|
|
type=semver,pattern={{major}}
|
|
type=sha,prefix=sha-
|
|
type=raw,value=latest,enable=${{ github.ref == 'refs/heads/main' || github.ref == 'refs/heads/master' }}
|
|
|
|
- name: Set version for web viewer footer
|
|
id: version
|
|
run: |
|
|
if [[ "${{ github.ref }}" == refs/tags/* ]]; then
|
|
echo "version=${{ github.ref_name }}" >> $GITHUB_OUTPUT
|
|
else
|
|
echo "version=dev" >> $GITHUB_OUTPUT
|
|
fi
|
|
|
|
- name: Build and push Docker image
|
|
uses: docker/build-push-action@v6
|
|
with:
|
|
context: .
|
|
# Push on all non-PR events; PRs only validate the build.
|
|
push: ${{ github.event_name != 'pull_request' }}
|
|
tags: ${{ steps.meta.outputs.tags }}
|
|
labels: ${{ steps.meta.outputs.labels }}
|
|
build-args: |
|
|
MESHCORE_BOT_VERSION=${{ steps.version.outputs.version }}
|
|
# BuildKit layer cache via GitHub Actions cache backend.
|
|
cache-from: type=gha
|
|
cache-to: type=gha,mode=max
|
|
# Supported platforms:
|
|
# linux/amd64 — x86-64 servers / desktops
|
|
# linux/arm64 — Raspberry Pi 4/5 (64-bit OS), Apple M-series via Rosetta
|
|
# linux/arm/v7 — Raspberry Pi 3 and older (32-bit Raspbian / Raspberry Pi OS)
|
|
platforms: linux/amd64,linux/arm64,linux/arm/v7
|
|
# Provenance attestations improve supply-chain transparency (SLSA level 1).
|
|
provenance: true
|
|
sbom: true
|