-
Notifications
You must be signed in to change notification settings - Fork 2
135 lines (111 loc) · 3.71 KB
/
ci:build:image.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
name: ci:build:image
on:
push:
branches:
- main
pull_request:
merge_group:
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
jobs:
build:
name: Continuous integration (build image)
strategy:
matrix:
platform:
- ubuntu-latest
runs-on: ${{ matrix.platform }}
timeout-minutes: 15
outputs:
server-tags: ${{ steps.meta-server.outputs.tags }}
steps:
- name: Checkout 🛎️
uses: actions/checkout@v4
- name: Docker meta
id: meta-server
uses: docker/metadata-action@v5
with:
images: ghcr.io/${{ github.repository }}
tags: |
type=raw,value=latest,enable={{is_default_branch}}
- name: Log in to GitHub Packages registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ github.token }}
- name: Build and push
uses: docker/build-push-action@v5
with:
context: .
tags: ${{ steps.meta-server.outputs.tags }}
labels: ${{ steps.meta-server.outputs.labels }}
test:
needs:
- build
strategy:
matrix:
platform:
- ubuntu-latest
runs-on: ${{ matrix.platform }}
timeout-minutes: 1
steps:
- name: Start MongoDB container
env:
MONGO_VERSION: '5.0'
run: |
echo 'dbpath=/data/db' > "${GITHUB_WORKSPACE}/mongodb.conf"
echo 'replSet=meteor' >> "${GITHUB_WORKSPACE}/mongodb.conf"
mkdir -p "${GITHUB_WORKSPACE}/data/db"
docker container run \
--detach \
--restart unless-stopped \
--publish 27017:27017 \
--volume "${GITHUB_WORKSPACE}/data/db":/data/db \
--volume "${GITHUB_WORKSPACE}/mongodb.conf":/mongodb.conf \
--log-opt max-size=100m \
--log-opt max-file=7 \
--name mongodb \
--hostname mongodb \
"mongo:${MONGO_VERSION}" mongod -f /mongodb.conf
sleep 5
docker exec mongodb mongo --eval \
'try {var c = rs.config();} catch (e){} if (c && c.members[0].host === "127.0.0.1:27017") { c.members[0].host = "127.0.0.1:27017"; rs.reconfig(c); } else { rs.initiate({_id: "meteor", members: [{_id: 0, host: "127.0.0.1:27017"}]}) }'
- name: Run server
env:
ROOT_URL: http://localhost
MONGO_URL: mongodb://127.0.0.1:27017/meteor
PORT: 3000
run: |
docker container run \
--detach \
--publish "${PORT}:${PORT}" \
--env "ROOT_URL=${ROOT_URL}" \
--env "MONGO_URL=${MONGO_URL}" \
--env "PORT=${PORT}" \
--name server \
--hostname server \
${{ needs.build.outputs.server-tags }}
- name: Retrieve server container IP address
id: server-container-ip-address
run: |
echo \
"address=$(docker inspect --format '{{ .NetworkSettings.IPAddress }}' server)" \
>> "$GITHUB_OUTPUT"
- name: Wait for server container 3000 port to be available
run: |
timeout 60 bash -c \
'until nc -z -v -w5 ${{ steps.server-container-ip-address.outputs.address }} 3000 ; do sleep 1; done'
- name: Stop Server container
run: |
docker container stop server
- name: Remove Server container
run: |
docker container rm server
- name: Stop MongoDB container
run: |
docker container stop mongodb
- name: Remove MongoDB container
run: |
docker container rm mongodb