⬆️ deps: Upgrade dependency @types/chai to v4.3.19. #911
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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-image: ${{ steps.meta-server.outputs.json }} | |
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=ref,event=tag,enable={{is_default_branch}} | |
type=ref,event=branch | |
type=ref,event=pr | |
type=sha,format=long | |
type=schedule | |
type=edge | |
- name: Log in to GitHub Packages registry | |
uses: docker/login-action@v3 | |
with: | |
registry: ghcr.io | |
username: ${{ github.repository_owner }} | |
password: ${{ github.token }} | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v3 | |
- name: Build and push | |
uses: docker/build-push-action@v6 | |
with: | |
context: . | |
push: true | |
tags: ${{ steps.meta-server.outputs.tags }} | |
labels: ${{ steps.meta-server.outputs.labels }} | |
cache-from: type=gha | |
cache-to: type=gha,mode=max | |
test: | |
name: Continuous integration (build image test) | |
needs: | |
- build | |
strategy: | |
matrix: | |
platform: | |
- ubuntu-latest | |
runs-on: ${{ matrix.platform }} | |
timeout-minutes: 3 | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
sparse-checkout: | | |
scripts/assert-replica-set.js | |
.github/actions/docker/container/ip-address/action.yml | |
.github/actions/docker/container/is-healthy/action.yml | |
.github/actions/docker/container/is-running/action.yml | |
.github/actions/network/is-reachable/action.yml | |
sparse-checkout-cone-mode: false | |
- name: Get server image URL | |
id: server-image-url | |
env: | |
IMAGE_METADATA: ${{ needs.build.outputs.server-image }} | |
run: | | |
IMAGE_URL="$(echo "${IMAGE_METADATA}" | jq -r 'first(.tags[] | select(test(":sha-[0-9a-f]{40}$")))')" | |
echo "url=${IMAGE_URL}" >> "${GITHUB_OUTPUT}" | |
test -n "${IMAGE_URL}" | |
- name: Log in to GitHub Packages registry | |
uses: docker/login-action@v3 | |
with: | |
registry: ghcr.io | |
username: ${{ github.repository_owner }} | |
password: ${{ github.token }} | |
- name: Create a network to connect the app to the database | |
run: | | |
docker network create patient-network | |
- name: Start MongoDB container | |
env: | |
MONGO_VERSION: '5.0' | |
run: | | |
mkdir -p "${GITHUB_WORKSPACE}/data/db" | |
docker container run \ | |
--detach \ | |
--restart unless-stopped \ | |
--network patient-network \ | |
--volume "${GITHUB_WORKSPACE}/data/db":/data/db \ | |
--volume "${GITHUB_WORKSPACE}/scripts/assert-replica-set.js":/scripts/assert-replica-set.js \ | |
--log-opt max-size=100m \ | |
--log-opt max-file=7 \ | |
--health-cmd 'mongosh --eval "replSet = \"meteor\"; hostname = \"mongodb\"" /scripts/assert-replica-set.js' \ | |
--health-interval 5s \ | |
--health-retries 3 \ | |
--health-timeout 10s \ | |
--health-start-period 40s \ | |
--name mongodb \ | |
"mongo:${MONGO_VERSION}" mongod --dbpath /data/db --replSet meteor | |
- name: Wait for MongoDB container to be healthy | |
uses: ./.github/actions/docker/container/is-healthy | |
with: | |
container: mongodb | |
timeout: 60 | |
- name: Run server | |
env: | |
ROOT_URL: http://localhost | |
MONGO_URL: mongodb://mongodb:27017/meteor | |
PORT: 3000 | |
run: | | |
docker container run \ | |
--init \ | |
--detach \ | |
--network patient-network \ | |
--publish "${PORT}:${PORT}" \ | |
--env "ROOT_URL=${ROOT_URL}" \ | |
--env "MONGO_URL=${MONGO_URL}" \ | |
--env "PORT=${PORT}" \ | |
--name server \ | |
${{ steps.server-image-url.outputs.url }} | |
- name: Retrieve server container IP address | |
id: server-container-ip-address | |
uses: ./.github/actions/docker/container/ip-address | |
with: | |
container: server | |
- name: Wait for container to be running | |
uses: ./.github/actions/docker/container/is-running | |
with: | |
container: server | |
timeout: 60 | |
- name: Wait for server container port to be available | |
uses: ./.github/actions/network/is-reachable | |
with: | |
timeout: 60 | |
host: ${{ steps.server-container-ip-address.outputs.address }} | |
port: 3000 | |
- name: Show docker containers | |
if: always() | |
run: | | |
docker ps -a | |
- name: Show mongodb container logs | |
if: always() | |
run: | | |
docker container logs --timestamps mongodb | |
- name: Show server container logs | |
if: always() | |
run: | | |
docker container logs --timestamps server | |
- name: Run healthcheck | |
run: | | |
timeout 60 bash -c \ | |
'curl -f http://${{ steps.server-container-ip-address.outputs.address }}:3000/api/healthcheck' | |
- name: Wait for container to be healthy | |
uses: ./.github/actions/docker/container/is-healthy | |
with: | |
container: server | |
timeout: 60 | |
- name: Show docker containers | |
if: always() | |
run: | | |
docker ps -a | |
- name: Show mongodb container logs | |
if: always() | |
run: | | |
docker container logs --timestamps mongodb | |
- name: Show server container logs | |
if: always() | |
run: | | |
docker container logs --timestamps server | |
- name: Stop Server container | |
run: | | |
docker container stop server | |
- name: Stop MongoDB container | |
run: | | |
docker container stop mongodb | |
- name: Show docker containers | |
if: always() | |
run: | | |
docker ps -a | |
- name: Show mongodb container logs | |
if: always() | |
run: | | |
docker container logs --timestamps mongodb | |
- name: Show server container logs | |
if: always() | |
run: | | |
docker container logs --timestamps server | |
- name: Remove Server container | |
run: | | |
docker container rm server | |
- name: Remove MongoDB container | |
run: | | |
docker container rm mongodb | |
- name: Show docker containers | |
if: always() | |
run: | | |
docker ps -a | |
- name: Delete network | |
run: | | |
docker network rm patient-network |