1+ name : Build and Push Docker Image for Loong64 
2+ 
3+ on :
4+   pull_request :
5+   push :
6+     branches :
7+       - master 
8+       - develop 
9+     tags :
10+       - ' v*.*.*' 
11+ 
12+ concurrency :
13+   group : ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} 
14+   cancel-in-progress : true 
15+ 
16+ env :
17+   DOCKER_REGISTRY : index.docker.io 
18+   DOCKER_USERNAME : metacall 
19+   IMAGE_NAME : core 
20+   BUILDKIT_VERSION : 0.13.0 
21+   PLATFORM : linux/loong64 
22+ 
23+ jobs :
24+   build :
25+     name : Build Loong64 Images 
26+     runs-on : ubuntu-latest 
27+     steps :
28+       - name : Checkout Repository 
29+         uses : actions/checkout@v4 
30+         with :
31+           fetch-depth : 0 
32+ 
33+       - name : Set up QEMU 
34+         uses : docker/setup-qemu-action@v3 
35+ 
36+       - name : Set up Docker BuildX 
37+         uses : docker/setup-buildx-action@v3 
38+         with :
39+           version : v${{ env.BUILDKIT_VERSION }} 
40+ 
41+       - name : Login to Docker Hub 
42+         uses : docker/login-action@v3 
43+         with :
44+           username : ${{ secrets.DOCKER_HUB_USERNAME }} 
45+           password : ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} 
46+ 
47+       - name : Build and Push deps Image 
48+         env :
49+           METACALL_PLATFORM : ${{ env.PLATFORM }} 
50+           DOCKER_BUILDKIT : 1 
51+         run : | 
52+           ./docker-compose.sh platform deps 
53+           platform_tag=$(echo "${{ env.PLATFORM }}" | tr '/' '-') 
54+           docker tag \ 
55+             ${DOCKER_USERNAME}/${IMAGE_NAME}:deps \ 
56+             ${DOCKER_REGISTRY}/${DOCKER_USERNAME}/${IMAGE_NAME}:deps-${platform_tag} 
57+           docker push ${DOCKER_REGISTRY}/${DOCKER_USERNAME}/${IMAGE_NAME}:deps-${platform_tag} 
58+ 
59+ name : Build and Push dev Image 
60+         env :
61+           METACALL_PLATFORM : ${{ env.PLATFORM }} 
62+           DOCKER_BUILDKIT : 1 
63+         run : | 
64+           ./docker-compose.sh platform dev 
65+           platform_tag=$(echo "${{ env.PLATFORM }}" | tr '/' '-') 
66+           docker tag \ 
67+             ${DOCKER_USERNAME}/${IMAGE_NAME}:dev \ 
68+             ${DOCKER_REGISTRY}/${DOCKER_USERNAME}/${IMAGE_NAME}:dev-${platform_tag} 
69+           docker push ${DOCKER_REGISTRY}/${DOCKER_USERNAME}/${IMAGE_NAME}:dev-${platform_tag} 
70+ 
71+ name : Build and Push runtime Image 
72+         env :
73+           METACALL_PLATFORM : ${{ env.PLATFORM }} 
74+           DOCKER_BUILDKIT : 1 
75+         run : | 
76+           ./docker-compose.sh platform runtime 
77+           platform_tag=$(echo "${{ env.PLATFORM }}" | tr '/' '-') 
78+           docker tag \ 
79+             ${DOCKER_USERNAME}/${IMAGE_NAME}:runtime \ 
80+             ${DOCKER_REGISTRY}/${DOCKER_USERNAME}/${IMAGE_NAME}:runtime-${platform_tag} 
81+           docker push ${DOCKER_REGISTRY}/${DOCKER_USERNAME}/${IMAGE_NAME}:runtime-${platform_tag} 
82+ 
83+ name : Build and Push cli Image 
84+         env :
85+           METACALL_PLATFORM : ${{ env.PLATFORM }} 
86+           DOCKER_BUILDKIT : 1 
87+         run : | 
88+           ./docker-compose.sh platform cli 
89+           platform_tag=$(echo "${{ env.PLATFORM }}" | tr '/' '-') 
90+           docker tag \ 
91+             ${DOCKER_USERNAME}/${IMAGE_NAME}:cli \ 
92+             ${DOCKER_REGISTRY}/${DOCKER_USERNAME}/${IMAGE_NAME}:cli-${platform_tag} 
93+           docker push ${DOCKER_REGISTRY}/${DOCKER_USERNAME}/${IMAGE_NAME}:cli-${platform_tag} 
94+ 
95+ name : Run Tests 
96+         env :
97+           DOCKER_BUILDKIT : 1 
98+         run : | 
99+           set -exuo pipefail 
100+           docker image inspect ${DOCKER_USERNAME}/${IMAGE_NAME}:cli --format='{{.Os}}/{{.Architecture}}' 
101+           cat <<EOF > Dockerfile.test 
102+           FROM ${DOCKER_USERNAME}/${IMAGE_NAME}:cli 
103+           RUN apt-get update && apt-get install -y file 
104+           RUN file /usr/local/bin/metacallcli && ldd /usr/local/bin/metacallcli 
105+           RUN echo "console.log('0123456789abcdef')" > script.js 
106+           RUN metacallcli script.js | tee output.txt 
107+           RUN grep 0123456789abcdef output.txt 
108+           EOF 
109+ 
110+           docker buildx build --progress=plain --platform ${{ env.PLATFORM }} -f Dockerfile.test -t test-image . 
111+ 
112+ manifest :
113+     name : Update Manifest Lists 
114+     needs : build 
115+     #  Only run when master or when tagging a version
116+     if : (github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/tags/')) && github.event_name != 'pull_request' 
117+     runs-on : ubuntu-latest 
118+     steps :
119+       - name : Login to Docker Hub 
120+         uses : docker/login-action@v3 
121+         with :
122+           username : ${{ secrets.DOCKER_HUB_USERNAME }} 
123+           password : ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} 
124+ 
125+       - name : Update Manifest Lists 
126+         run : | 
127+           set -exuo pipefail 
128+           platform_tag=$(echo "${{ env.PLATFORM }}" | tr '/' '-') 
129+            
130+           # Update manifests for each tag 
131+           for tag in "deps" "dev" "runtime" "cli"; do 
132+             docker manifest create ${DOCKER_REGISTRY}/${DOCKER_USERNAME}/${IMAGE_NAME}:${tag} \ 
133+               ${DOCKER_REGISTRY}/${DOCKER_USERNAME}/${IMAGE_NAME}:${tag}-${platform_tag} --amend 
134+             docker manifest push ${DOCKER_REGISTRY}/${DOCKER_USERNAME}/${IMAGE_NAME}:${tag} 
135+           done 
136+ 
137+           # Update latest tag 
138+           docker manifest create ${DOCKER_REGISTRY}/${DOCKER_USERNAME}/${IMAGE_NAME}:latest \ 
139+             ${DOCKER_REGISTRY}/${DOCKER_USERNAME}/${IMAGE_NAME}:cli-${platform_tag} --amend 
140+           docker manifest push ${DOCKER_REGISTRY}/${DOCKER_USERNAME}/${IMAGE_NAME}:latest 
141+ 
142+           # Update version tag if this is a release 
143+           if [[ "${{ startsWith(github.ref, 'refs/tags/') }}" = true ]]; then 
144+             VERSION=${GITHUB_REF#refs/tags/v} 
145+             for tag in "deps" "dev" "runtime" "cli"; do 
146+               docker manifest create ${DOCKER_REGISTRY}/${DOCKER_USERNAME}/${IMAGE_NAME}:${VERSION}-${tag} \ 
147+                 ${DOCKER_REGISTRY}/${DOCKER_USERNAME}/${IMAGE_NAME}:${tag}-${platform_tag} --amend 
148+               docker manifest push ${DOCKER_REGISTRY}/${DOCKER_USERNAME}/${IMAGE_NAME}:${VERSION}-${tag} 
149+             done 
150+           fi  
0 commit comments