Skip to content

Commit b7444c9

Browse files
committed
chore
1 parent 0f3884b commit b7444c9

21 files changed

+6607
-0
lines changed

.github/workflows/ci.yaml

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
name: CI - Testcontainers
2+
3+
on:
4+
push:
5+
branches: [main]
6+
pull_request:
7+
branches: [main]
8+
9+
jobs:
10+
test-without-docker:
11+
name: Tests - Running Outside Container
12+
runs-on: ubuntu-latest
13+
14+
steps:
15+
- name: Checkout code
16+
uses: actions/checkout@v4
17+
18+
- name: Set up Node.js
19+
uses: actions/setup-node@v4
20+
with:
21+
node-version: '24'
22+
cache: 'npm'
23+
cache-dependency-path: './src/16-docker-outside-of-docker/package.json'
24+
25+
- name: Install dependencies
26+
working-directory: ./src/16-docker-outside-of-docker
27+
run: npm install
28+
29+
- name: Run tests - Container reuse without compose (outside container)
30+
working-directory: ./src/16-docker-outside-of-docker
31+
env:
32+
TESTCONTAINERS_RYUK_DISABLED: true
33+
run: npm run test:without-compose
34+
35+
- name: Run tests - Container reuse with compose (outside container)
36+
working-directory: ./src/16-docker-outside-of-docker
37+
env:
38+
TESTCONTAINERS_RYUK_DISABLED: true
39+
run: npm run test:with-compose
40+
41+
# test-inside-docker:
42+
# name: Tests - Running Inside Container (Docker-in-Docker)
43+
# runs-on: ubuntu-latest
44+
45+
# steps:
46+
# - name: Checkout code
47+
# uses: actions/checkout@v4
48+
49+
# - name: Set up Docker Buildx
50+
# uses: docker/setup-buildx-action@v3
51+
52+
# - name: Start test container with docker compose
53+
# working-directory: ./src/16-docker-outside-of-docker
54+
# run: docker compose up -d
55+
56+
# - name: Install dependencies inside container
57+
# working-directory: ./src/16-docker-outside-of-docker
58+
# run: docker compose exec -T tests npm install
59+
60+
# - name: Run tests - Container reuse without compose (inside container)
61+
# working-directory: ./src/16-docker-outside-of-docker
62+
# run: |
63+
# docker compose exec -T \
64+
# -e TESTCONTAINERS_RYUK_DISABLED=true \
65+
# tests npm run test:without-compose
66+
67+
# - name: Run tests - Container reuse with compose (inside container)
68+
# working-directory: ./src/16-docker-outside-of-docker
69+
# run: |
70+
# docker compose exec -T \
71+
# -e TESTCONTAINERS_RYUK_DISABLED=true \
72+
# tests npm run test:with-compose
73+
74+
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
FROM node:24.9.0-slim
2+
3+
RUN apt update && \
4+
apt install -y ca-certificates curl && \
5+
install -m 0755 -d /etc/apt/keyrings && \
6+
curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc && \
7+
chmod a+r /etc/apt/keyrings/docker.asc && \
8+
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null && \
9+
apt update && \
10+
apt install -y docker-ce-cli docker-buildx-plugin docker-compose-plugin
11+
12+
RUN groupadd -f -g 999 docker && \
13+
usermod -aG docker node
14+
15+
WORKDIR /home/node/app
16+
17+
USER node
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
services:
2+
3+
tests:
4+
build:
5+
context: .
6+
# Configurações necessárias para Testcontainers funcionar dentro de container:
7+
# stop_signal: SIGKILL - envia sinal de término forçado (kill -9) ao invés de SIGTERM
8+
# Motivo: garante que o container de teste pare imediatamente junto com os containers criados pelo Testcontainers
9+
# em CI o container que executa os testes morre instantaneamente, tornando mais rápido o processo de finalização
10+
stop_signal: SIGKILL
11+
# stdin_open: true - mantém o STDIN (entrada padrão) aberto, equivalente ao flag -i do docker run
12+
# Motivo: necessário para o Testcontainers manter conexão com o Docker daemon
13+
stdin_open: true
14+
# tty: true - aloca um pseudo-terminal (TTY), equivalente ao flag -t do docker run
15+
# Motivo: necessário para o Testcontainers receber sinais do Docker daemon corretamente
16+
tty: true
17+
# stdin_open: true e tty: true juntos equivalem ao flag -it do docker run
18+
volumes:
19+
- .:/home/node/app
20+
- /var/run/docker.sock:/var/run/docker.sock:ro
21+
- ~/.docker/config-read.json:/home/node/.docker/config.json:ro
22+
environment:
23+
# com docker compose é criado uma network bridge customizada, então o test não consegue comunicar com ryuk
24+
# com docker run funciona normalmente pois usa a network default bridge
25+
- TESTCONTAINERS_HOST_OVERRIDE=host.docker.internal
26+
extra_hosts:
27+
- "host.docker.internal:host-gateway"

0 commit comments

Comments
 (0)