Skip to content

Commit cef74b3

Browse files
committed
cap08-07-integracao-continua
1 parent 6ecf6e4 commit cef74b3

File tree

3 files changed

+148
-0
lines changed

3 files changed

+148
-0
lines changed

.github/workflows/ci.yaml

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
name: CI - Testcontainers
2+
3+
on:
4+
push:
5+
branches: [main]
6+
pull_request:
7+
branches: [main]
8+
9+
jobs:
10+
# temos o docker, mas os testes rodam foram de um container
11+
test-without-docker:
12+
name: Tests - Running Outside Container
13+
runs-on: ubuntu-latest
14+
15+
steps:
16+
- name: Checkout code
17+
uses: actions/checkout@v4
18+
19+
- name: Set up Node.js
20+
uses: actions/setup-node@v4
21+
with:
22+
node-version: "24"
23+
cache: "npm"
24+
cache-dependency-path: "./src/16-docker-outside-of-docker/package.json"
25+
26+
- name: Set up Docker Buildx
27+
uses: docker/setup-buildx-action@v3
28+
29+
- name: Install dependencies
30+
working-directory: ./src/16-docker-outside-of-docker
31+
run: npm install
32+
33+
- name: Run tests - Container reuse without compose (outside container)
34+
working-directory: ./src/16-docker-outside-of-docker
35+
env:
36+
TESTCONTAINERS_RYUK_DISABLED: true
37+
run: npm run test:without-compose
38+
39+
- name: Run tests - Container reuse with compose (outside container)
40+
working-directory: ./src/16-docker-outside-of-docker
41+
env:
42+
TESTCONTAINERS_RYUK_DISABLED: true
43+
run: npm run test:with-compose
44+
45+
test-inside-docker:
46+
name: Tests - Running Inside Container (Docker-in-Docker)
47+
runs-on: ubuntu-latest
48+
49+
steps:
50+
- name: Checkout code
51+
uses: actions/checkout@v4
52+
53+
- name: Set up Docker Buildx
54+
uses: docker/setup-buildx-action@v3
55+
56+
- name: Create Docker config file
57+
run: |
58+
mkdir -p ~/.docker
59+
echo '${{ secrets.DOCKER_CONFIG_JSON }}' > ~/.docker/config-read.json
60+
61+
- name: Get user and docker group IDs
62+
id: get-ids
63+
run: |
64+
echo "user_id=$(id -u)" >> $GITHUB_OUTPUT
65+
echo "docker_gid=$(getent group docker | cut -d: -f3)" >> $GITHUB_OUTPUT
66+
echo "Current user ID: $(id -u)"
67+
echo "Docker group ID: $(getent group docker | cut -d: -f3)"
68+
69+
# Setup Testcontainers Cloud Client right before your Testcontainers tests
70+
- name: Setup Testcontainers Cloud Client
71+
uses: atomicjar/testcontainers-cloud-setup-action@v1
72+
with:
73+
token: ${{ secrets.TC_CLOUD_TOKEN }}
74+
75+
- name: Start test container with docker compose
76+
working-directory: ./src/16-docker-outside-of-docker
77+
env:
78+
USER_ID: ${{ steps.get-ids.outputs.user_id }}
79+
DOCKER_GROUP_ID: ${{ steps.get-ids.outputs.docker_gid }}
80+
run: docker compose -f compose.ci.yaml up -d
81+
82+
- name: Install dependencies inside container
83+
working-directory: ./src/16-docker-outside-of-docker
84+
run: docker compose -f compose.ci.yaml exec -T tests npm install
85+
- name: Run tests - Container reuse without compose (inside container)
86+
working-directory: ./src/16-docker-outside-of-docker
87+
run: |
88+
docker compose -f compose.ci.yaml exec -T \
89+
-e TESTCONTAINERS_RYUK_DISABLED=true \
90+
-e DEBUG=testcontainers* \
91+
tests npm run test:without-compose
92+
93+
- name: Run tests - Container reuse with compose (inside container)
94+
working-directory: ./src/16-docker-outside-of-docker
95+
run: |
96+
docker compose -f compose.ci.yaml exec -T \
97+
-e TESTCONTAINERS_RYUK_DISABLED=true \
98+
tests npm run test:with-compose
99+
100+
#Optional
101+
- name: Terminate Testcontainers Cloud Client active sessions
102+
uses: atomicjar/testcontainers-cloud-setup-action@v1
103+
with:
104+
action: terminate
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
2+
services:
3+
4+
tests:
5+
extends:
6+
file: compose.yaml
7+
service: tests
8+
# Usa a network do host para permitir acesso ao Testcontainers Cloud Agent em localhost
9+
network_mode: host
10+
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
services:
2+
3+
tests:
4+
build:
5+
context: .
6+
args:
7+
DOCKER_GROUP_ID: ${DOCKER_GROUP_ID:-999}
8+
USER_ID: ${USER_ID:-1000}
9+
# Configurações necessárias para Testcontainers funcionar dentro de container:
10+
# stop_signal: SIGKILL - envia sinal de término forçado (kill -9) ao invés de SIGTERM
11+
# Motivo: garante que o container de teste pare imediatamente junto com os containers criados pelo Testcontainers
12+
# em CI o container que executa os testes morre instantaneamente, tornando mais rápido o processo de finalização
13+
stop_signal: SIGKILL
14+
# stdin_open: true - mantém o STDIN (entrada padrão) aberto, equivalente ao flag -i do docker run
15+
# Motivo: necessário para o Testcontainers manter conexão com o Docker daemon
16+
stdin_open: true
17+
# tty: true - aloca um pseudo-terminal (TTY), equivalente ao flag -t do docker run
18+
# Motivo: necessário para o Testcontainers receber sinais do Docker daemon corretamente
19+
tty: true
20+
# stdin_open: true e tty: true juntos equivalem ao flag -it do docker exec -it....
21+
volumes:
22+
- .:/home/node/app
23+
# pra dev container com a feature do dood, deixe esta linha comentada
24+
- /var/run/docker.sock:/var/run/docker.sock:ro
25+
- ~/.docker/config-read.json:/home/node/.docker/config.json:ro
26+
# se está usando o testcontainers desktop, descomente a linha abaixo
27+
- ~/.testcontainers.properties:/home/node/.testcontainers.properties:ro
28+
environment:
29+
# com docker compose é criado uma network bridge customizada, então o test não consegue comunicar com ryuk
30+
# com docker run funciona normalmente pois usa a network default bridge
31+
- TESTCONTAINERS_HOST_OVERRIDE=host.docker.internal
32+
extra_hosts:
33+
- "host.docker.internal:host-gateway"
34+

0 commit comments

Comments
 (0)