Skip to content

Commit bbbd05c

Browse files
committed
feature: 构建双架构镜像
1 parent 3edd185 commit bbbd05c

File tree

1 file changed

+82
-14
lines changed

1 file changed

+82
-14
lines changed

.github/workflows/docker-images-reusable.yml

Lines changed: 82 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ on:
1111
type: string
1212

1313
jobs:
14-
build-and-push:
14+
build-and-push-amd:
1515
runs-on: ubuntu-latest
1616
permissions:
1717
contents: read
@@ -35,30 +35,98 @@ jobs:
3535
BASE_IMAGE=ghcr.io/$LOWERCASE_REPO/datamate-${{ inputs.service_name }}
3636
if [[ $GITHUB_REF == refs/tags/v* ]]; then
3737
TAG=${GITHUB_REF#refs/tags/v}
38-
echo "TAGS=$BASE_IMAGE:$TAG" >> $GITHUB_OUTPUT
38+
echo "TAGS=$BASE_IMAGE:amd64-$TAG" >> $GITHUB_OUTPUT
3939
elif [[ $GITHUB_REF == refs/heads/main ]]; then
40-
echo "TAGS=$BASE_IMAGE:latest" >> $GITHUB_OUTPUT
40+
echo "TAGS=$BASE_IMAGE:amd64" >> $GITHUB_OUTPUT
4141
else
42-
echo "TAGS=$BASE_IMAGE:temp" >> $GITHUB_OUTPUT
42+
echo "TAGS=$BASE_IMAGE:amd64-temp" >> $GITHUB_OUTPUT
4343
fi
4444
45-
- name: Build AMD Docker Image
45+
- name: Build Docker Image
4646
run: |
47-
docker build -t datamate-${{ inputs.service_name }} . -f scripts/images/${{ inputs.service_name }}/Dockerfile --platform amd64
47+
docker build -t datamate-${{ inputs.service_name }}:amd64 . -f scripts/images/${{ inputs.service_name }}/Dockerfile --platform amd64
4848
49-
- name: Tag & Push AMD Docker Image
49+
- name: Tag & Push Docker Image
5050
if: github.event_name != 'pull_request'
5151
run: |
52-
docker tag datamate-${{ inputs.service_name }}:latest ${{ steps.set-tag.outputs.TAGS }}
53-
docker push ${{ steps.set-tag.outputs.TAGS }} --platform amd64
52+
docker tag datamate-${{ inputs.service_name }}:amd64 ${{ steps.set-tag.outputs.TAGS }}
53+
docker push ${{ steps.set-tag.outputs.TAGS }}
54+
55+
build-and-push-arm:
56+
runs-on: ubuntu-24.04-arm
57+
permissions:
58+
contents: read
59+
packages: write
5460

55-
- name: Build ARM Docker Image
61+
steps:
62+
- uses: actions/checkout@v4
63+
64+
- name: Login to GitHub Container Registry
5665
if: github.event_name != 'pull_request'
66+
uses: docker/login-action@v3
67+
with:
68+
registry: ghcr.io
69+
username: ${{ github.actor }}
70+
password: ${{ secrets.GITHUB_TOKEN }}
71+
72+
- name: Set Docker Image Tag
73+
id: set-tag
5774
run: |
58-
docker build -t datamate-${{ inputs.service_name }} . -f scripts/images/${{ inputs.service_name }}/Dockerfile --platform arm64
75+
LOWERCASE_REPO=$(echo "${{ github.repository_owner }}" | tr '[:upper:]' '[:lower:]')
76+
BASE_IMAGE=ghcr.io/$LOWERCASE_REPO/datamate-${{ inputs.service_name }}
77+
if [[ $GITHUB_REF == refs/tags/v* ]]; then
78+
TAG=${GITHUB_REF#refs/tags/v}
79+
echo "TAGS=$BASE_IMAGE:arm64-$TAG" >> $GITHUB_OUTPUT
80+
elif [[ $GITHUB_REF == refs/heads/main ]]; then
81+
echo "TAGS=$BASE_IMAGE:arm64" >> $GITHUB_OUTPUT
82+
else
83+
echo "TAGS=$BASE_IMAGE:arm64-temp" >> $GITHUB_OUTPUT
84+
fi
5985
60-
- name: Tag & Push ARM Docker Image
86+
- name: Build Docker Image
87+
run: |
88+
docker build -t datamate-${{ inputs.service_name }}:arm64 . -f scripts/images/${{ inputs.service_name }}/Dockerfile --platform arm64
89+
90+
- name: Tag & Push Docker Image
6191
if: github.event_name != 'pull_request'
6292
run: |
63-
docker tag datamate-${{ inputs.service_name }}:latest ${{ steps.set-tag.outputs.TAGS }}
64-
docker push ${{ steps.set-tag.outputs.TAGS }} --platform arm64
93+
docker tag datamate-${{ inputs.service_name }}:arm64 ${{ steps.set-tag.outputs.TAGS }}
94+
docker push ${{ steps.set-tag.outputs.TAGS }}
95+
96+
manifest:
97+
runs-on: ubuntu-latest
98+
if: github.event_name != 'pull_request'
99+
steps:
100+
- name: Login to GitHub Container Registry
101+
uses: docker/login-action@v3
102+
with:
103+
registry: ghcr.io
104+
username: ${{ github.actor }}
105+
password: ${{ secrets.GITHUB_TOKEN }}
106+
107+
- name: Set Docker Image Tag
108+
id: set-tag
109+
run: |
110+
LOWERCASE_REPO=$(echo "${{ github.repository_owner }}" | tr '[:upper:]' '[:lower:]')
111+
BASE_IMAGE=ghcr.io/$LOWERCASE_REPO/datamate-${{ inputs.service_name }}
112+
if [[ $GITHUB_REF == refs/tags/v* ]]; then
113+
TAG=${GITHUB_REF#refs/tags/v}
114+
echo "TAGS=$BASE_IMAGE:$TAG" >> $GITHUB_OUTPUT
115+
echo "ARM_TAGS=$BASE_IMAGE:arm64-$TAG" >> $GITHUB_OUTPUT
116+
echo "AMD_TAGS=$BASE_IMAGE:amd64-$TAG" >> $GITHUB_OUTPUT
117+
elif [[ $GITHUB_REF == refs/heads/main ]]; then
118+
echo "TAGS=$BASE_IMAGE:latest" >> $GITHUB_OUTPUT
119+
echo "ARM_TAGS=$BASE_IMAGE:arm64" >> $GITHUB_OUTPUT
120+
echo "AMD_TAGS=$BASE_IMAGE:amd64" >> $GITHUB_OUTPUT
121+
else
122+
echo "TAGS=$BASE_IMAGE:temp" >> $GITHUB_OUTPUT
123+
echo "ARM_TAGS=$BASE_IMAGE:arm64-temp" >> $GITHUB_OUTPUT
124+
echo "AMD_TAGS=$BASE_IMAGE:amd64-temp" >> $GITHUB_OUTPUT
125+
fi
126+
127+
- name: Manifest Docker Image
128+
run: |
129+
docker manifest create ${{ steps.set-tag.outputs.TAGS }} \
130+
${{ steps.set-tag.outputs.AMD_TAGS }} \
131+
${{ steps.set-tag.outputs.ARM_TAGS }}
132+
docker manifest push ${{ steps.set-tag.outputs.TAGS }}

0 commit comments

Comments
 (0)