1919 workflow_call :
2020
2121jobs :
22- build-and-push :
22+ build-and-push-amd :
2323 runs-on : ubuntu-latest
2424 permissions :
2525 contents : read
@@ -41,26 +41,114 @@ jobs:
4141 run : |
4242 if [[ $GITHUB_REF == refs/tags/v* ]]; then
4343 TAG=${GITHUB_REF#refs/tags/v}
44- echo "TAGS=$TAG" >> $GITHUB_OUTPUT
44+ echo "TAGS=amd64- $TAG" >> $GITHUB_OUTPUT
4545 elif [[ $GITHUB_REF == refs/heads/main ]]; then
46- echo "TAGS=latest " >> $GITHUB_OUTPUT
46+ echo "TAGS=amd64 " >> $GITHUB_OUTPUT
4747 else
48- echo "TAGS=temp" >> $GITHUB_OUTPUT
48+ echo "TAGS=amd64- temp" >> $GITHUB_OUTPUT
4949 fi
5050
5151 - name : Build Docker Image
5252 run : |
53- make build-deer-flow VERSION=latest
53+ cp -n runtime/deer-flow/.env.example runtime/deer-flow/.env
54+ cp -n runtime/deer-flow/conf.yaml.example runtime/deer-flow/conf.yaml
55+ docker build -t deer-flow-backend:amd64 . -f scripts/images/deer-flow-backend/Dockerfile
56+ docker build -t deer-flow-frontend:amd64 . -f scripts/images/deer-flow-frontend/Dockerfile
5457
55- - name : Tag Docker Image
58+ - name : Tag & Push Docker Image
59+ if : github.event_name != 'pull_request'
5660 run : |
5761 LOWERCASE_REPO=$(echo "${{ github.repository_owner }}" | tr '[:upper:]' '[:lower:]')
58- docker tag deer-flow-backend:latest ghcr.io/$LOWERCASE_REPO/deer-flow-backend:${{ steps.set-tag.outputs.TAGS }}
59- docker tag deer-flow-frontend:latest ghcr.io/$LOWERCASE_REPO/deer-flow-frontend:${{ steps.set-tag.outputs.TAGS }}
62+ docker tag deer-flow-backend:amd64 ghcr.io/$LOWERCASE_REPO/deer-flow-backend:${{ steps.set-tag.outputs.TAGS }}
63+ docker tag deer-flow-frontend:amd64 ghcr.io/$LOWERCASE_REPO/deer-flow-frontend:${{ steps.set-tag.outputs.TAGS }}
64+ docker push ghcr.io/$LOWERCASE_REPO/deer-flow-backend:${{ steps.set-tag.outputs.TAGS }}
65+ docker push ghcr.io/$LOWERCASE_REPO/deer-flow-frontend:${{ steps.set-tag.outputs.TAGS }}
66+
6067
61- - name : Push Docker Image
68+ build-and-push-arm :
69+ runs-on : ubuntu-24.04-arm
70+ permissions :
71+ contents : read
72+ packages : write
73+
74+ steps :
75+ - uses : actions/checkout@v4
76+
77+ - name : Login to GitHub Container Registry
78+ if : github.event_name != 'pull_request'
79+ uses : docker/login-action@v3
80+ with :
81+ registry : ghcr.io
82+ username : ${{ github.actor }}
83+ password : ${{ secrets.GITHUB_TOKEN }}
84+
85+ - name : Set Docker Image Tag
86+ id : set-tag
87+ run : |
88+ if [[ $GITHUB_REF == refs/tags/v* ]]; then
89+ TAG=${GITHUB_REF#refs/tags/v}
90+ echo "TAGS=arm64-$TAG" >> $GITHUB_OUTPUT
91+ elif [[ $GITHUB_REF == refs/heads/main ]]; then
92+ echo "TAGS=arm64" >> $GITHUB_OUTPUT
93+ else
94+ echo "TAGS=arm64-temp" >> $GITHUB_OUTPUT
95+ fi
96+
97+ - name : Build Docker Image
98+ run : |
99+ cp -n runtime/deer-flow/.env.example runtime/deer-flow/.env
100+ cp -n runtime/deer-flow/conf.yaml.example runtime/deer-flow/conf.yaml
101+ docker build -t deer-flow-backend:arm64 . -f scripts/images/deer-flow-backend/Dockerfile
102+ docker build -t deer-flow-frontend:arm64 . -f scripts/images/deer-flow-frontend/Dockerfile
103+
104+ - name : Tag & Push Docker Image
62105 if : github.event_name != 'pull_request'
63106 run : |
64107 LOWERCASE_REPO=$(echo "${{ github.repository_owner }}" | tr '[:upper:]' '[:lower:]')
108+ docker tag deer-flow-backend:arm64 ghcr.io/$LOWERCASE_REPO/deer-flow-backend:${{ steps.set-tag.outputs.TAGS }}
109+ docker tag deer-flow-frontend:arm64 ghcr.io/$LOWERCASE_REPO/deer-flow-frontend:${{ steps.set-tag.outputs.TAGS }}
65110 docker push ghcr.io/$LOWERCASE_REPO/deer-flow-backend:${{ steps.set-tag.outputs.TAGS }}
66111 docker push ghcr.io/$LOWERCASE_REPO/deer-flow-frontend:${{ steps.set-tag.outputs.TAGS }}
112+
113+ manifest :
114+ runs-on : ubuntu-latest
115+ if : github.event_name != 'pull_request'
116+ needs : [ build-and-push-amd, build-and-push-arm ]
117+ steps :
118+ - name : Login to GitHub Container Registry
119+ uses : docker/login-action@v3
120+ with :
121+ registry : ghcr.io
122+ username : ${{ github.actor }}
123+ password : ${{ secrets.GITHUB_TOKEN }}
124+
125+ - name : Set Docker Image Tag
126+ id : set-tag
127+ run : |
128+ LOWERCASE_REPO=$(echo "${{ github.repository_owner }}" | tr '[:upper:]' '[:lower:]')
129+ BASE_IMAGE=ghcr.io/$LOWERCASE_REPO/datamate-${{ inputs.service_name }}
130+ if [[ $GITHUB_REF == refs/tags/v* ]]; then
131+ TAG=${GITHUB_REF#refs/tags/v}
132+ echo "TAGS=$TAG" >> $GITHUB_OUTPUT
133+ echo "ARM_TAGS=arm64-$TAG" >> $GITHUB_OUTPUT
134+ echo "AMD_TAGS=amd64-$TAG" >> $GITHUB_OUTPUT
135+ elif [[ $GITHUB_REF == refs/heads/main ]]; then
136+ echo "TAGS=latest" >> $GITHUB_OUTPUT
137+ echo "ARM_TAGS=arm64" >> $GITHUB_OUTPUT
138+ echo "AMD_TAGS=amd64" >> $GITHUB_OUTPUT
139+ else
140+ echo "TAGS=temp" >> $GITHUB_OUTPUT
141+ echo "ARM_TAGS=arm64-temp" >> $GITHUB_OUTPUT
142+ echo "AMD_TAGS=amd64-temp" >> $GITHUB_OUTPUT
143+ fi
144+
145+ - name : Manifest Docker Image
146+ run : |
147+ docker manifest create ghcr.io/$LOWERCASE_REPO/deer-flow-backend:${{ steps.set-tag.outputs.TAGS }} \
148+ ghcr.io/$LOWERCASE_REPO/deer-flow-backend:${{ steps.set-tag.outputs.AMD_TAGS }} \
149+ ghcr.io/$LOWERCASE_REPO/deer-flow-backend:${{ steps.set-tag.outputs.ARM_TAGS }}
150+ docker manifest push ghcr.io/$LOWERCASE_REPO/deer-flow-backend:${{ steps.set-tag.outputs.TAGS }}
151+ docker manifest create ghcr.io/$LOWERCASE_REPO/deer-flow-frontend:${{ steps.set-tag.outputs.TAGS }} \
152+ ghcr.io/$LOWERCASE_REPO/deer-flow-frontend:${{ steps.set-tag.outputs.AMD_TAGS }} \
153+ ghcr.io/$LOWERCASE_REPO/deer-flow-frontend:${{ steps.set-tag.outputs.ARM_TAGS }}
154+ docker manifest push ghcr.io/$LOWERCASE_REPO/deer-flow-frontend:${{ steps.set-tag.outputs.TAGS }}
0 commit comments