Skip to content

Commit 005b67c

Browse files
committed
ci: updated workflow
1 parent 6d8dd59 commit 005b67c

1 file changed

Lines changed: 197 additions & 0 deletions

File tree

Lines changed: 197 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,197 @@
1+
name: "Docker Image CI: crawlab (tencent)"
2+
3+
on:
4+
push:
5+
branches: [ develop, main ]
6+
#pull_request:
7+
# branches: [ main ]
8+
release:
9+
types: [ published ]
10+
workflow_dispatch:
11+
repository_dispatch:
12+
types: [ docker-crawlab ]
13+
14+
env:
15+
IMAGE_PATH_CRAWLAB_BACKEND: backend
16+
IMAGE_PATH_CRAWLAB_FRONTEND: frontend
17+
IMAGE_NAME_CRAWLAB: ccr.ccs.tencentyun.com/crawlab/crawlab
18+
IMAGE_NAME_CRAWLAB_BACKEND: crawlabteam/crawlab-backend
19+
IMAGE_NAME_CRAWLAB_FRONTEND: crawlabteam/crawlab-frontend
20+
21+
jobs:
22+
setup:
23+
runs-on: ubuntu-latest
24+
outputs:
25+
is_matched_backend: ${{ steps.check_changed_files.outputs.is_matched_backend }}
26+
is_matched_frontend: ${{ steps.check_changed_files.outputs.is_matched_frontend }}
27+
is_matched_dockerfile: ${{ steps.check_changed_files.outputs.is_matched_dockerfile }}
28+
version: ${{ steps.version.outputs.version }}
29+
steps:
30+
- uses: actions/checkout@v2
31+
- name: Get changed files
32+
id: changed_files
33+
uses: tj-actions/changed-files@v18.7
34+
- id: check_changed_files
35+
name: Check changed files
36+
run: |
37+
# check changed files
38+
is_matched_backend=0
39+
is_matched_frontend=0
40+
is_matched_dockerfile=0
41+
for file in ${{ steps.changed_files.outputs.all_changed_files }}; do
42+
if [[ $file =~ ^${IMAGE_PATH_CRAWLAB_BACKEND}/.* ]]; then
43+
file_backend=$file
44+
is_matched_backend=1
45+
fi
46+
if [[ $file =~ ^${IMAGE_PATH_CRAWLAB_FRONTEND}/.* ]]; then
47+
file_frontend=$file
48+
is_matched_frontend=1
49+
fi
50+
if [[ $file == Dockerfile ]]; then
51+
file_dockerfile=$file
52+
is_matched_dockerfile=1
53+
fi
54+
done
55+
56+
# set outputs
57+
if [[ "${{ github.ref }}" == "refs/tags/"* ]]; then
58+
is_matched_backend=1
59+
is_matched_frontend=1
60+
is_matched_dockerfile=1
61+
fi
62+
63+
echo "::set-output name=is_matched_backend::$is_matched_backend"
64+
echo "::set-output name=is_matched_frontend::$is_matched_frontend"
65+
echo "::set-output name=is_matched_dockerfile::$is_matched_dockerfile"
66+
67+
# echo outputs
68+
echo "is_matched_backend=$is_matched_backend, file_backend=$file_backend"
69+
echo "is_matched_frontend=$is_matched_frontend, file_frontend=$file_frontend"
70+
echo "is_matched_dockerfile=$is_matched_dockerfile, file_dockerfile=$file_dockerfile"
71+
72+
- id: version
73+
name: Get version
74+
run: |
75+
# Strip git ref prefix from version
76+
VERSION=$(echo "${{ github.ref }}" | sed -e 's,.*/\(.*\),\1,')
77+
78+
# Strip "v" prefix from tag name
79+
[[ "${{ github.ref }}" == "refs/tags/"* ]] && VERSION=$(echo $VERSION | sed -e 's/^v//')
80+
81+
# Use Docker `latest` tag convention
82+
[ "$VERSION" == "main" ] && VERSION=latest
83+
84+
echo "::set-output name=version::$VERSION"
85+
86+
build-backend:
87+
needs: [ setup ]
88+
if: needs.setup.outputs.is_matched_backend == '1'
89+
runs-on: ubuntu-latest
90+
steps:
91+
- uses: actions/checkout@v2
92+
- name: Get changed files
93+
id: changed-files
94+
uses: tj-actions/changed-files@v18.7
95+
- name: Build image
96+
run: |
97+
cd $IMAGE_PATH_CRAWLAB_BACKEND
98+
docker build . --file Dockerfile --tag image
99+
- name: Log into registry
100+
run: echo ${{ secrets.DOCKER_PASSWORD }} | docker login -u ${{ secrets.DOCKER_USERNAME }} --password-stdin
101+
- name: Push image
102+
run: |
103+
IMAGE_VERSION=${{needs.setup.outputs.version}}
104+
IMAGE_NAME=$IMAGE_NAME_CRAWLAB_BACKEND
105+
docker tag image $IMAGE_NAME:$IMAGE_VERSION
106+
docker push $IMAGE_NAME:$IMAGE_VERSION
107+
108+
build-frontend:
109+
needs: [ setup ]
110+
if: needs.setup.outputs.is_matched_frontend == '1'
111+
runs-on: ubuntu-latest
112+
steps:
113+
- uses: actions/checkout@v2
114+
- name: Get changed files
115+
id: changed-files
116+
uses: tj-actions/changed-files@v18.7
117+
- name: Build image
118+
run: |
119+
cd $IMAGE_PATH_CRAWLAB_FRONTEND
120+
docker build . --file Dockerfile --tag image
121+
- name: Log into registry
122+
run: echo ${{ secrets.DOCKER_PASSWORD }} | docker login -u ${{ secrets.DOCKER_USERNAME }} --password-stdin
123+
- name: Push image
124+
run: |
125+
IMAGE_VERSION=${{needs.setup.outputs.version}}
126+
IMAGE_NAME=$IMAGE_NAME_CRAWLAB_FRONTEND
127+
docker tag image $IMAGE_NAME:$IMAGE_VERSION
128+
docker push $IMAGE_NAME:$IMAGE_VERSION
129+
130+
build-crawlab:
131+
if: ${{ always() }}
132+
needs: [ setup, build-backend, build-frontend ]
133+
runs-on: ubuntu-latest
134+
services:
135+
mongo:
136+
image: mongo:4.2
137+
ports:
138+
- 27017:27017
139+
steps:
140+
- uses: actions/checkout@v2
141+
- name: Update Dockerfile
142+
run: |
143+
IMAGE_VERSION=${{needs.setup.outputs.version}}
144+
if [[ $IMAGE_VERSION != "latest" ]]; then
145+
for n in crawlab-backend crawlab-frontend; do
146+
IMAGE_NAME=$n
147+
sed -i "s/${IMAGE_NAME}:latest/${IMAGE_NAME}:${IMAGE_VERSION}/" Dockerfile
148+
done
149+
fi
150+
151+
- name: Build image
152+
run: docker build . --file Dockerfile --tag image
153+
154+
- name: Test image
155+
run: |
156+
docker run --rm -d --name crawlab_master \
157+
-e CRAWLAB_NODE_MASTER=true \
158+
-e CRAWLAB_DEMO=true \
159+
-e CRAWLAB_MONGO_HOST=localhost \
160+
-e CRAWLAB_MONGO_PORT=27017 \
161+
-p 8080:8080 \
162+
--network host \
163+
image
164+
docker exec crawlab_master env
165+
docker logs -f crawlab_master &
166+
sleep 10
167+
docker ps
168+
cmd='curl http://localhost:8080/api/system-info -s'
169+
echo "cmd: ${cmd}"
170+
res=`${cmd}`
171+
echo "res: ${res}"
172+
if [[ $res =~ "success" ]]; then
173+
:
174+
else
175+
exit 1
176+
fi
177+
docker stop crawlab_master
178+
179+
- name: Set up Python
180+
uses: actions/setup-python@v1
181+
with:
182+
python-version: '3.8'
183+
184+
- name: Test demo
185+
run: |
186+
pip install crawlab-demo
187+
crawlab-demo validate
188+
189+
- name: Log into registry
190+
run: echo ${{ secrets.DOCKER_TENCENT_PASSWORD }} | docker login -u ${{ secrets.DOCKER_TENCENT_USERNAME }} --password-stdin ccr.ccs.tencentyun.com
191+
192+
- name: Push image
193+
run: |
194+
IMAGE_VERSION=${{needs.setup.outputs.version}}
195+
IMAGE_ID=$IMAGE_NAME_CRAWLAB
196+
docker tag image $IMAGE_ID:$IMAGE_VERSION
197+
docker push $IMAGE_ID:$IMAGE_VERSION

0 commit comments

Comments
 (0)