Skip to content

feat: add automatic compose file location fetching #39

feat: add automatic compose file location fetching

feat: add automatic compose file location fetching #39

Workflow file for this run

name: CI
on:
push:
branches: [main]
pull_request:
branches: [main]
workflow_call:
secrets:
CODECOV_TOKEN:
required: false
permissions:
contents: read
jobs:
lint:
name: Lint
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Setup Node.js
uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0
with:
node-version: 24
- name: Install dependencies
run: |
(cd app && npm ci)
(cd e2e && npm ci)
(cd ui && npm ci)
- name: Lint app
run: npm run lint
working-directory: app
- name: Lint e2e
run: npm run lint
working-directory: e2e
- name: Lint ui
run: npm run lint
working-directory: ui
- name: ESM readiness check
run: ./scripts/esm-readiness.sh || true
test:
name: Test & Coverage
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Setup Node.js
uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0
with:
node-version: 24
- name: Install app dependencies
run: npm ci
working-directory: app
- name: Install ui dependencies
run: npm ci
working-directory: ui
- name: Run app tests
run: npm test
working-directory: app
- name: Run ui tests
run: npm run test:unit
working-directory: ui
- name: Upload coverage to Codecov
uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5.5.2
with:
token: ${{ secrets.CODECOV_TOKEN }}
files: app/coverage/lcov.info,ui/coverage/lcov.info
flags: app,ui
fail_ci_if_error: false
compose-trigger-log-smoke:
name: Compose Trigger Log Smoke
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Start workload containers
run: |
docker run -d \
--name dd-compose-label-test \
--label dd.watch=true \
--label dd.compose.file=/tmp/ci-stack/docker-compose.yml \
--label dd.compose.auto=true \
--label dd.compose.prune=false \
alpine:3.21 sleep 600
docker run -d \
--name dd-compose-unlabeled-test \
--label dd.watch=true \
alpine:3.21 sleep 600
- name: Build drydock image
run: docker build -t drydock:ci-trigger --build-arg DD_VERSION=ci .
- name: Start drydock
run: |
docker run -d \
--name drydock-ci-trigger \
--volume /var/run/docker.sock:/var/run/docker.sock \
--env DD_WATCHER_LOCAL_WATCHBYDEFAULT=true \
--env DD_WATCHER_LOCAL_WATCHATSTART=true \
--env DD_WATCHER_LOCAL_WATCHEVENTS=true \
drydock:ci-trigger
- name: Assert compose trigger creation from labels
run: |
found=0
for i in $(seq 1 60); do
logs="$(docker logs drydock-ci-trigger 2>&1 || true)"
if echo "$logs" | grep -Eq 'trigger\.dockercompose\..*dd-compose-label-test'; then
found=1
echo "Found dockercompose trigger registration log"
break
fi
sleep 2
done
if [ "$found" -ne 1 ]; then
echo "Did not find dockercompose trigger creation log for dd-compose-label-test"
docker logs drydock-ci-trigger 2>&1 || true
exit 1
fi
logs="$(docker logs drydock-ci-trigger 2>&1 || true)"
if ! echo "$logs" | grep -Eq '"auto":("true"|true)'; then
echo "Did not find compose trigger auto configuration in logs"
docker logs drydock-ci-trigger 2>&1 || true
exit 1
fi
if ! echo "$logs" | grep -Eq '"prune":("false"|false)'; then
echo "Did not find compose trigger prune configuration in logs"
docker logs drydock-ci-trigger 2>&1 || true
exit 1
fi
if ! echo "$logs" | grep -Eq '"requireinclude":("true"|true)'; then
echo "Did not find scoped requireinclude=true configuration in logs"
docker logs drydock-ci-trigger 2>&1 || true
exit 1
fi
if echo "$logs" | grep -Eq 'trigger\.dockercompose\..*dd-compose-unlabeled-test'; then
echo "Unexpected dockercompose trigger registration for unlabeled container"
docker logs drydock-ci-trigger 2>&1 || true
exit 1
fi
- name: Dump drydock logs on failure
if: failure()
run: docker logs drydock-ci-trigger 2>&1 || true
- name: Cleanup containers
if: always()
run: |
docker rm -f drydock-ci-trigger dd-compose-label-test dd-compose-unlabeled-test >/dev/null 2>&1 || true
build:
name: Build
runs-on: ubuntu-latest
needs: [lint, test]
permissions:
contents: read
steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Setup Node.js
uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0
with:
node-version: 24
- name: Install ui dependencies
run: npm ci
working-directory: ui
- name: Build ui
run: npm run build
working-directory: ui
- name: Docker build (smoke test)
run: docker build --no-cache -t drydock --build-arg DD_VERSION=ci .