1- name : Docker
2-
3- # This workflow uses actions that are not certified by GitHub.
4- # They are provided by a third-party and are governed by
5- # separate terms of service, privacy policy, and support
6- # documentation.
1+ name : Build and Publish multi-arch Docker Image
72
83on :
9- schedule :
10- - cron : ' 29 17 * * *'
114 push :
12- branches : [ "master" ]
13- # Publish semver tags as releases.
14- tags : [ 'v*.*.*' ]
15- pull_request :
16- branches : [ "master" ]
17-
18- env :
19- # Use docker.io for Docker Hub if empty
20- REGISTRY : ghcr.io
21- # github.repository as <account>/<repo>
22- IMAGE_NAME : ${{ github.repository }}
23-
5+ branches :
6+ - main
7+ tags :
8+ - ' v*.*.*'
9+ paths-ignore :
10+ - ' README.md'
2411
2512jobs :
26- build :
27-
13+ build-and-push :
2814 runs-on : ubuntu-latest
2915 permissions :
3016 contents : read
3117 packages : write
32- # This is used to complete the identity challenge
33- # with sigstore/fulcio when running outside of PRs.
34- id-token : write
3518
3619 steps :
3720 - name : Checkout repository
3821 uses : actions/checkout@v4
3922
40- # Install the cosign tool except on PR
41- # https://github.com/sigstore/cosign-installer
42- - name : Install cosign
43- if : github.event_name != 'pull_request'
44- uses : sigstore/cosign-installer@59acb6260d9c0ba8f4a2f9d9b48431a222b68e20 # v3.5.0
45- with :
46- cosign-release : ' v2.2.4'
47-
48- # Set up BuildKit Docker container builder to be able to build
49- # multi-platform images and export cache
50- # https://github.com/docker/setup-buildx-action
51- - name : Set up Docker Buildx
52- uses : docker/setup-buildx-action@f95db51fddba0c2d1ec667646a06c2ce06100226 # v3.0.0
53-
54- # Login against a Docker registry except on PR
55- # https://github.com/docker/login-action
56- - name : Log into registry ${{ env.REGISTRY }}
57- if : github.event_name != 'pull_request'
58- uses : docker/login-action@343f7c4344506bcbf9b4de18042ae17996df046d # v3.0.0
23+ - name : Log in to GitHub Container Registry
24+ uses : docker/login-action@v3
5925 with :
60- registry : ${{ env.REGISTRY }}
26+ registry : ghcr.io
6127 username : ${{ github.actor }}
6228 password : ${{ secrets.GITHUB_TOKEN }}
6329
64- # Extract metadata (tags, labels) for Docker
65- # https://github.com/docker/metadata-action
66- - name : Extract Docker metadata
67- id : meta
68- uses : docker/metadata-action@96383f45573cb7f253c731d3b3ab81c87ef81934 # v5.0.0
69- with :
70- images : ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
30+ - name : Set up QEMU (для эмуляции arm64 на x86)
31+ uses : docker/setup-qemu-action@v3
7132
72- # Build and push Docker image with Buildx (don't push on PR)
73- # https://github.com/ docker/build-push -action
74- - name : Build and push Docker image
75- id : build- and- push
76- uses : docker/build-push-action@0565240e2d4ab88bba5387d719585280857ece09 # v5.0.0
33+ - name : Set up Docker Buildx
34+ uses : docker/setup-buildx -action@v3
35+
36+ - name : Build and push multi-arch Docker image
37+ uses : docker/build-push-action@v5
7738 with :
7839 context : .
79- push : ${{ github.event_name != 'pull_request' }}
80- tags : ${{ steps.meta.outputs.tags }}
81- labels : ${{ steps.meta.outputs.labels }}
82- cache-from : type=gha
83- cache-to : type=gha,mode=max
84-
85- # Sign the resulting Docker image digest except on PRs.
86- # This will only write to the public Rekor transparency log when the Docker
87- # repository is public to avoid leaking data. If you would like to publish
88- # transparency data even for private images, pass --force to cosign below.
89- # https://github.com/sigstore/cosign
90- - name : Sign the published Docker image
91- if : ${{ github.event_name != 'pull_request' }}
92- env :
93- # https://docs.github.com/en/actions/security-guides/security-hardening-for-github-actions#using-an-intermediate-environment-variable
94- TAGS : ${{ steps.meta.outputs.tags }}
95- DIGEST : ${{ steps.build-and-push.outputs.digest }}
96- # This step uses the identity token to provision an ephemeral certificate
97- # against the sigstore community Fulcio instance.
98- run : echo "${TAGS}" | xargs -I {} cosign sign --yes {}@${DIGEST}
40+ platforms : linux/amd64,linux/arm64
41+ push : true
42+ tags : |
43+ ghcr.io/${{ github.repository }}:latest
44+ ghcr.io/${{ github.repository }}:${{ github.ref_name }}
0 commit comments