1111 type : string
1212
1313jobs :
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