add shellspec golden harness for the legacy make engine
- spec/golden/cases.txt: 69 black-box cases (CLI wrapper mode and make include mode) run in a hermetic sandbox with a mocked docker - spec/golden/expected/*.txt recorded from this engine (baseline) - make test / test-golden / golden-record / lint dev targets
This commit is contained in:
Vendored
+2
@@ -0,0 +1,2 @@
|
||||
APP_SERVICE_8080_TAGS=urlprefix-app.${DOMAIN}/*
|
||||
POSTGRES_PASSWORD=changeme
|
||||
Vendored
+2
@@ -0,0 +1,2 @@
|
||||
MYOS ?= /usr/local/lib/myos
|
||||
-include $(MYOS)/make/include.mk
|
||||
@@ -0,0 +1,4 @@
|
||||
services:
|
||||
app:
|
||||
environment:
|
||||
DEBUG: "true"
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
services:
|
||||
app:
|
||||
image: alpine:3.20
|
||||
command: sleep infinity
|
||||
environment:
|
||||
APP_DOMAIN: ${APP_DOMAIN}
|
||||
DOMAIN: ${DOMAIN}
|
||||
labels:
|
||||
- SERVICE_8080_NAME=${COMPOSE_SERVICE_NAME}-app-8080
|
||||
- SERVICE_8080_TAGS=${APP_SERVICE_8080_TAGS:-urlprefix-app.localhost/*}
|
||||
networks:
|
||||
- default
|
||||
- private
|
||||
@@ -0,0 +1,5 @@
|
||||
services:
|
||||
db:
|
||||
image: postgres:16-alpine
|
||||
environment:
|
||||
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
services:
|
||||
web:
|
||||
image: nginx:alpine
|
||||
@@ -0,0 +1,6 @@
|
||||
services:
|
||||
myos:
|
||||
image: ${USER_DOCKER_IMAGE:-myos:latest}
|
||||
container_name: ${USER_COMPOSE_PROJECT_NAME:-user}
|
||||
volumes:
|
||||
- ${USER_DOCKER_VOLUME:-user}:/tmp/ssh-agent
|
||||
@@ -0,0 +1 @@
|
||||
default ?= postgres redis
|
||||
@@ -0,0 +1,3 @@
|
||||
services:
|
||||
drone:
|
||||
image: drone/drone:1.6
|
||||
@@ -0,0 +1,2 @@
|
||||
DRONE_SERVER_HOST ?= drone.$(DOMAIN)
|
||||
ENV_VARS += DRONE_SERVER_HOST
|
||||
@@ -0,0 +1,7 @@
|
||||
services:
|
||||
drone:
|
||||
image: drone/drone:${DRONE_VERSION:-latest}
|
||||
environment:
|
||||
DRONE_SERVER_HOST: ${DRONE_SERVER_HOST:-drone.localhost}
|
||||
networks:
|
||||
- private
|
||||
@@ -0,0 +1,4 @@
|
||||
services:
|
||||
nginx:
|
||||
volumes:
|
||||
- dns:/dns
|
||||
@@ -0,0 +1,4 @@
|
||||
services:
|
||||
nginx:
|
||||
volumes:
|
||||
- www:/var/www
|
||||
@@ -0,0 +1,6 @@
|
||||
services:
|
||||
nginx:
|
||||
image: nginx:alpine
|
||||
container_name: ${HOST_COMPOSE_PROJECT_NAME:-localhost}-nginx
|
||||
ports:
|
||||
- "8080:80"
|
||||
@@ -0,0 +1,3 @@
|
||||
services:
|
||||
postgres:
|
||||
image: postgres:9.6
|
||||
@@ -0,0 +1,4 @@
|
||||
services:
|
||||
postgres:
|
||||
ports:
|
||||
- "5432:5432"
|
||||
@@ -0,0 +1,13 @@
|
||||
services:
|
||||
postgres:
|
||||
image: postgres:${POSTGRES_VERSION:-latest}
|
||||
environment:
|
||||
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-postgres}
|
||||
labels:
|
||||
- SERVICE_5432_NAME=${COMPOSE_SERVICE_NAME}-postgres-5432
|
||||
networks:
|
||||
- private
|
||||
volumes:
|
||||
- postgres:/var/lib/postgresql/data
|
||||
volumes:
|
||||
postgres:
|
||||
@@ -0,0 +1,5 @@
|
||||
services:
|
||||
redis:
|
||||
image: redis:alpine
|
||||
networks:
|
||||
- private
|
||||
@@ -0,0 +1 @@
|
||||
testing ?= drone/drone redis
|
||||
@@ -0,0 +1,12 @@
|
||||
services:
|
||||
consul:
|
||||
image: hashicorp/consul:1.15
|
||||
container_name: ${HOST_COMPOSE_PROJECT_NAME:-localhost}-consul
|
||||
network_mode: host
|
||||
restart: always
|
||||
environment:
|
||||
CONSUL_HTTP_TOKEN: ${HOST_CONSUL_HTTP_TOKEN}
|
||||
volumes:
|
||||
- consul:/consul/data
|
||||
volumes:
|
||||
consul:
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
services:
|
||||
fabio:
|
||||
image: fabiolb/fabio:1.6.3
|
||||
container_name: ${HOST_COMPOSE_PROJECT_NAME:-localhost}-fabio
|
||||
depends_on: [consul]
|
||||
ports:
|
||||
- "80:80"
|
||||
- "443:443"
|
||||
environment:
|
||||
FABIO_REGISTRY_CONSUL_ADDR: ${DOCKER_HOST_INET4:-127.0.0.1}:8500
|
||||
FABIO_LOG_ACCESS_TARGET: ${HOST_FABIO_LOG_ACCESS:-}
|
||||
networks:
|
||||
- public
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
# Stack host: consul + fabio (80/443) + registrator, one instance per host.
|
||||
host ?= host/consul host/fabio host/registrator
|
||||
|
||||
.PHONY: host
|
||||
host:
|
||||
$(call make,up STACK="$(host)")
|
||||
|
||||
.PHONY: host-down
|
||||
host-down:
|
||||
$(call make,down STACK="$(host)")
|
||||
@@ -0,0 +1,9 @@
|
||||
services:
|
||||
registrator:
|
||||
image: gliderlabs/registrator:master
|
||||
container_name: ${HOST_COMPOSE_PROJECT_NAME:-localhost}-registrator
|
||||
network_mode: host
|
||||
depends_on: [consul]
|
||||
command: -internal=false -useIpFromLabel SERVICE_ADDRESS consul://127.0.0.1:8500
|
||||
volumes:
|
||||
- ${DOCKER_SOCKET_LOCATION:-/var/run/docker.sock}:/tmp/docker.sock
|
||||
@@ -0,0 +1,8 @@
|
||||
# Intentional differences between the legacy make engine and the bash CLI
|
||||
|
||||
Golden expectations in `expected/` are recorded from the legacy engine
|
||||
(`git tag legacy-1.0-beta`). When the CLI intentionally behaves differently,
|
||||
the case gets an override in `expected.cli/<case>.txt` and a line here.
|
||||
|
||||
| case | delta | why |
|
||||
|---|---|---|
|
||||
@@ -0,0 +1,70 @@
|
||||
# name | fixture | args
|
||||
host-print-project | host-project | print-COMPOSE_PROJECT_NAME STACK=host/consul
|
||||
host-print-compose-file | host-project | print-COMPOSE_FILE STACK=host/consul
|
||||
host-print-stack-dir | host-project | print-STACK_DIR STACK=host/consul
|
||||
host-print-env-vars | host-project | print-ENV_VARS STACK=host/consul
|
||||
host-print-suffix | host-project | print-COMPOSE_FILE_SUFFIX STACK=host/consul
|
||||
host-print-network-default | host-project | print-DOCKER_NETWORK_DEFAULT STACK=host/consul
|
||||
host-print-network-private | host-project | print-DOCKER_NETWORK_PRIVATE STACK=host/consul
|
||||
host-print-network-public | host-project | print-DOCKER_NETWORK_PUBLIC STACK=host/consul
|
||||
host-print-host-stack | host-project | print-HOST_STACK STACK=host/consul
|
||||
host-print-app | host-project | print-APP STACK=host/consul
|
||||
host-up-consul | host-project | up STACK=host/consul
|
||||
host-up-two | host-project | up STACK="host/consul host/fabio"
|
||||
host-up-group | host-project | up STACK=host
|
||||
host-target | host-project | host
|
||||
host-down-group | host-project | down STACK=host
|
||||
host-config | host-project | config STACK=host/fabio
|
||||
host-ps | host-project | ps STACK=host/consul
|
||||
host-logs | host-project | logs STACK=host/consul
|
||||
host-stack-host-config | host-project | stack-host-config
|
||||
host-exec | host-project | exec STACK=host/consul SERVICE=consul ARGS='consul members'
|
||||
host-env-master | host-project | print-COMPOSE_FILE STACK=host/consul ENV=master
|
||||
host-print-project-env-master | host-project | print-COMPOSE_PROJECT_NAME STACK=host/consul ENV=master
|
||||
app-print-project | app-git | print-COMPOSE_PROJECT_NAME
|
||||
app-print-compose-file | app-git | print-COMPOSE_FILE
|
||||
app-print-app | app-git | print-APP
|
||||
app-print-stack | app-git | print-STACK
|
||||
app-up | app-git | up
|
||||
app-up-env-master | app-git | up ENV=master
|
||||
app-config | app-git | config
|
||||
app-down | app-git | down
|
||||
app-run | app-git | run SERVICE=app ARGS='id'
|
||||
app-scale | app-git | scale SERVICE=app NUM=2
|
||||
app-print-service-name | app-git | print-COMPOSE_SERVICE_NAME
|
||||
app-print-repository | app-git | print-DOCKER_REPOSITORY
|
||||
nogit-print-project | app-nogit | print-COMPOSE_PROJECT_NAME
|
||||
nogit-print-app | app-nogit | print-APP
|
||||
nogit-up | app-nogit | up
|
||||
cat-postgres-compose-file | app-nogit | print-COMPOSE_FILE STACK=postgres
|
||||
cat-postgres-project | app-nogit | print-COMPOSE_PROJECT_NAME STACK=postgres
|
||||
cat-postgres-up | app-nogit | up STACK=postgres
|
||||
cat-postgres-version | app-nogit | print-COMPOSE_FILE STACK=postgres:9.6
|
||||
cat-postgres-env-master | app-nogit | print-COMPOSE_FILE STACK=postgres ENV=master
|
||||
cat-user-project | app-nogit | print-COMPOSE_PROJECT_NAME STACK=User/User
|
||||
cat-user-compose-file | app-nogit | print-COMPOSE_FILE STACK=User/User
|
||||
cat-user-network | app-nogit | print-DOCKER_NETWORK STACK=User/User
|
||||
cat-group-testing | app-nogit | print-COMPOSE_FILE STACK=testing
|
||||
cat-group-testing-up | app-nogit | up STACK=testing
|
||||
cat-group-default-up | app-nogit | up STACK=default
|
||||
cat-drone-version | app-nogit | print-COMPOSE_FILE STACK=drone/drone:1.6
|
||||
cat-drone-env-vars | app-nogit | print-ENV_VARS STACK=drone/drone
|
||||
cat-nginx-www | app-nogit | print-COMPOSE_FILE STACK=host/nginx COMPOSE_FILE_WWW=true
|
||||
cat-nginx-www-dns | app-nogit | print-COMPOSE_FILE STACK=host/nginx COMPOSE_FILE_WWW=true COMPOSE_FILE_DNS=true
|
||||
cat-nginx-project | app-nogit | print-COMPOSE_PROJECT_NAME STACK=host/nginx
|
||||
cat-unknown-stack | app-nogit | print-COMPOSE_FILE STACK=doesnotexist
|
||||
cat-unknown-target | app-nogit | doesnotexist
|
||||
misc-help | app-nogit | help
|
||||
inc-app-print-project | app-git | @make print-COMPOSE_PROJECT_NAME
|
||||
inc-app-print-compose-file | app-git | @make print-COMPOSE_FILE
|
||||
inc-app-print-app | app-git | @make print-APP
|
||||
inc-app-up | app-git | @make up
|
||||
inc-app-up-env-master | app-git | @make up ENV=master
|
||||
inc-app-config | app-git | @make config
|
||||
inc-app-down | app-git | @make down
|
||||
inc-app-ps | app-git | @make ps
|
||||
inc-app-print-service-name | app-git | @make print-COMPOSE_SERVICE_NAME
|
||||
inc-app-print-env-vars | app-git | @make print-ENV_VARS
|
||||
inc-app-print-network-default | app-git | @make print-DOCKER_NETWORK_DEFAULT
|
||||
inc-app-stack-postgres-up | app-git | @make up STACK=postgres
|
||||
inc-app-unknown-target | app-git | @make doesnotexist
|
||||
@@ -0,0 +1,3 @@
|
||||
make -o docker-stack-config MAKE_OLDFILE=docker-stack-config ENV=local DOCKER_COMPOSE=docker --log-level=error compose docker-compose-config STACK=myos APP_NAME=myos
|
||||
docker --log-level=error compose --ansi=auto -f @MYOS@/stack/myos/networks.yml -p tester-myos-local config
|
||||
[exit 0]
|
||||
@@ -0,0 +1,3 @@
|
||||
make -o docker-stack-down MAKE_OLDFILE=docker-stack-down ENV=local DOCKER_COMPOSE=docker --log-level=error compose docker-compose-down STACK=myos APP_NAME=myos
|
||||
docker --log-level=error compose --ansi=auto -f @MYOS@/stack/myos/networks.yml -p tester-myos-local down
|
||||
[exit 0]
|
||||
@@ -0,0 +1,2 @@
|
||||
APP myos
|
||||
[exit 0]
|
||||
@@ -0,0 +1,2 @@
|
||||
COMPOSE_FILE @MYOS@/stack/myos/networks.yml
|
||||
[exit 0]
|
||||
@@ -0,0 +1,2 @@
|
||||
COMPOSE_PROJECT_NAME tester-myos-local
|
||||
[exit 0]
|
||||
@@ -0,0 +1,2 @@
|
||||
DOCKER_REPOSITORY tester/myos/local
|
||||
[exit 0]
|
||||
@@ -0,0 +1,2 @@
|
||||
COMPOSE_SERVICE_NAME tester-myos-local
|
||||
[exit 0]
|
||||
@@ -0,0 +1,2 @@
|
||||
STACK myos
|
||||
[exit 0]
|
||||
@@ -0,0 +1,2 @@
|
||||
docker --log-level=error compose --ansi=auto -f @MYOS@/stack/myos/networks.yml -p tester-myos-local run --rm app id
|
||||
[exit 0]
|
||||
@@ -0,0 +1,3 @@
|
||||
make -o docker-stack-scale MAKE_OLDFILE=docker-stack-scale ENV=local DOCKER_COMPOSE=docker --log-level=error compose docker-compose-scale STACK=myos APP_NAME=myos
|
||||
docker --log-level=error compose --ansi=auto -f @MYOS@/stack/myos/networks.yml -p tester-myos-local up -d --scale app=2
|
||||
[exit 0]
|
||||
@@ -0,0 +1,5 @@
|
||||
make -o docker-stack-up MAKE_OLDFILE=docker-stack-up ENV=master DOCKER_COMPOSE=docker --log-level=error compose docker-compose-up STACK=myos APP_NAME=myos
|
||||
sh -c docker network create tester-master >/dev/null 2>&1
|
||||
sh -c docker network create testhost >/dev/null 2>&1
|
||||
docker --log-level=error compose --ansi=auto -f @MYOS@/stack/myos/networks.yml -p tester-myos-master up -d
|
||||
[exit 0]
|
||||
@@ -0,0 +1,5 @@
|
||||
make -o docker-stack-up MAKE_OLDFILE=docker-stack-up ENV=local DOCKER_COMPOSE=docker --log-level=error compose docker-compose-up STACK=myos APP_NAME=myos
|
||||
sh -c docker network create tester-local >/dev/null 2>&1
|
||||
sh -c docker network create testhost >/dev/null 2>&1
|
||||
docker --log-level=error compose --ansi=auto -f @MYOS@/stack/myos/networks.yml -p tester-myos-local up -d
|
||||
[exit 0]
|
||||
@@ -0,0 +1,2 @@
|
||||
ENV_VARS DOCKER_NETWORK_DEFAULT DOCKER_NETWORK_PRIVATE DOCKER_NETWORK_PUBLIC DRONE_SERVER_HOST DRONE_VERSION
|
||||
[exit 0]
|
||||
@@ -0,0 +1,2 @@
|
||||
make/apps/common.mk:54: *** multiple target patterns. Stop.
|
||||
[exit 2]
|
||||
@@ -0,0 +1,5 @@
|
||||
make -o docker-stack-up MAKE_OLDFILE=docker-stack-up ENV=local DOCKER_COMPOSE=docker --log-level=error compose docker-compose-up STACK=default APP_NAME=default
|
||||
sh -c docker network create tester-local >/dev/null 2>&1
|
||||
sh -c docker network create testhost >/dev/null 2>&1
|
||||
docker --log-level=error compose --ansi=auto -f @HOME@/.local/share/myos/stack/postgres/postgres.yml -f @HOME@/.local/share/myos/stack/postgres/postgres.local.yml -f @HOME@/.local/share/myos/stack/redis/redis.yml -f @MYOS@/stack/myos/networks.yml -p tester-default-local up -d
|
||||
[exit 0]
|
||||
@@ -0,0 +1,5 @@
|
||||
make -o docker-stack-up MAKE_OLDFILE=docker-stack-up ENV=local DOCKER_COMPOSE=docker --log-level=error compose docker-compose-up STACK=testing APP_NAME=testing
|
||||
sh -c docker network create tester-local >/dev/null 2>&1
|
||||
sh -c docker network create testhost >/dev/null 2>&1
|
||||
docker --log-level=error compose --ansi=auto -f @HOME@/.local/share/myos/stack/drone/drone.yml -f @HOME@/.local/share/myos/stack/redis/redis.yml -f @MYOS@/stack/myos/networks.yml -p tester-testing-local up -d
|
||||
[exit 0]
|
||||
@@ -0,0 +1,2 @@
|
||||
COMPOSE_FILE @HOME@/.local/share/myos/stack/drone/drone.yml @HOME@/.local/share/myos/stack/redis/redis.yml @MYOS@/stack/myos/networks.yml
|
||||
[exit 0]
|
||||
@@ -0,0 +1,2 @@
|
||||
COMPOSE_PROJECT_NAME testhost
|
||||
[exit 0]
|
||||
@@ -0,0 +1,2 @@
|
||||
COMPOSE_FILE @HOME@/.local/share/myos/stack/host/nginx.yml @HOME@/.local/share/myos/stack/host/nginx.www.yml @HOME@/.local/share/myos/stack/host/nginx.dns.yml @MYOS@/stack/myos/networks.yml @MYOS@/stack/myos/volumes.www.local.yml @MYOS@/stack/myos/volumes.dns.local.yml
|
||||
[exit 0]
|
||||
@@ -0,0 +1,2 @@
|
||||
COMPOSE_FILE @HOME@/.local/share/myos/stack/host/nginx.yml @HOME@/.local/share/myos/stack/host/nginx.www.yml @MYOS@/stack/myos/networks.yml @MYOS@/stack/myos/volumes.www.local.yml
|
||||
[exit 0]
|
||||
@@ -0,0 +1,2 @@
|
||||
COMPOSE_FILE @HOME@/.local/share/myos/stack/postgres/postgres.yml @HOME@/.local/share/myos/stack/postgres/postgres.local.yml @MYOS@/stack/myos/networks.yml
|
||||
[exit 0]
|
||||
@@ -0,0 +1,2 @@
|
||||
COMPOSE_FILE @HOME@/.local/share/myos/stack/postgres/postgres.yml @MYOS@/stack/myos/networks.yml
|
||||
[exit 0]
|
||||
@@ -0,0 +1,2 @@
|
||||
COMPOSE_PROJECT_NAME tester-myos-local
|
||||
[exit 0]
|
||||
@@ -0,0 +1,5 @@
|
||||
make -o docker-stack-up MAKE_OLDFILE=docker-stack-up ENV=local DOCKER_COMPOSE=docker --log-level=error compose docker-compose-up STACK=postgres APP_NAME=postgres
|
||||
sh -c docker network create tester-local >/dev/null 2>&1
|
||||
sh -c docker network create testhost >/dev/null 2>&1
|
||||
docker --log-level=error compose --ansi=auto -f @HOME@/.local/share/myos/stack/postgres/postgres.yml -f @HOME@/.local/share/myos/stack/postgres/postgres.local.yml -f @MYOS@/stack/myos/networks.yml -p tester-postgres-local up -d
|
||||
[exit 0]
|
||||
@@ -0,0 +1,2 @@
|
||||
make/apps/common.mk:54: *** multiple target patterns. Stop.
|
||||
[exit 2]
|
||||
@@ -0,0 +1,2 @@
|
||||
COMPOSE_FILE @MYOS@/stack/myos/networks.yml
|
||||
[exit 0]
|
||||
@@ -0,0 +1,2 @@
|
||||
WARNING: myos[0] doesnotexist-rule-exists: target doesnotexist unavailable in app myos
|
||||
[exit 0]
|
||||
@@ -0,0 +1,2 @@
|
||||
COMPOSE_FILE @HOME@/.local/share/myos/stack/User/User.yml @MYOS@/stack/myos/networks.yml
|
||||
[exit 0]
|
||||
@@ -0,0 +1,2 @@
|
||||
DOCKER_NETWORK tester
|
||||
[exit 0]
|
||||
@@ -0,0 +1,2 @@
|
||||
COMPOSE_PROJECT_NAME tester-example-test
|
||||
[exit 0]
|
||||
@@ -0,0 +1,3 @@
|
||||
make -o docker-stack-config MAKE_OLDFILE=docker-stack-config ENV=local DOCKER_COMPOSE=docker --log-level=error compose docker-compose-config STACK=host/fabio APP_NAME=host
|
||||
docker --log-level=error compose --ansi=auto -f @WD@/stack/host/fabio.yml -f @MYOS@/stack/myos/networks.yml -p testhost config
|
||||
[exit 0]
|
||||
@@ -0,0 +1,3 @@
|
||||
make -o docker-stack-down MAKE_OLDFILE=docker-stack-down ENV=local DOCKER_COMPOSE=docker --log-level=error compose docker-compose-down STACK=host APP_NAME=host
|
||||
docker --log-level=error compose --ansi=auto -f @WD@/stack/host/consul.yml -f @WD@/stack/host/fabio.yml -f @WD@/stack/host/registrator.yml -f @MYOS@/stack/myos/networks.yml -p testhost down
|
||||
[exit 0]
|
||||
@@ -0,0 +1,2 @@
|
||||
COMPOSE_FILE @WD@/stack/host/consul.yml @MYOS@/stack/myos/networks.yml
|
||||
[exit 0]
|
||||
@@ -0,0 +1,5 @@
|
||||
docker --log-level=error compose --ansi=auto -f @WD@/stack/host/consul.yml -f @MYOS@/stack/myos/networks.yml -p testhost exec -T consul sh -c consul members
|
||||
/bin/bash: -c: line 0: syntax error near unexpected token `||'
|
||||
/bin/bash: -c: line 0: `|| true'
|
||||
make: *** [exec] Error 2
|
||||
[exit 2]
|
||||
@@ -0,0 +1,3 @@
|
||||
make -o docker-stack-logs MAKE_OLDFILE=docker-stack-logs ENV=local DOCKER_COMPOSE=docker --log-level=error compose docker-compose-logs STACK=host/consul APP_NAME=host
|
||||
docker --log-level=error compose --ansi=auto -f @WD@/stack/host/consul.yml -f @MYOS@/stack/myos/networks.yml -p testhost logs --follow --tail=100
|
||||
[exit 0]
|
||||
@@ -0,0 +1,2 @@
|
||||
APP myos
|
||||
[exit 0]
|
||||
@@ -0,0 +1,2 @@
|
||||
COMPOSE_FILE @WD@/stack/host/consul.yml @MYOS@/stack/myos/networks.yml
|
||||
[exit 0]
|
||||
@@ -0,0 +1,2 @@
|
||||
ENV_VARS DOCKER_NETWORK_DEFAULT DOCKER_NETWORK_PRIVATE DOCKER_NETWORK_PUBLIC DRONE_SERVER_HOST HOST_COMPOSE_PROJECT_NAME HOST_CONSUL_HTTP_TOKEN
|
||||
[exit 0]
|
||||
@@ -0,0 +1,2 @@
|
||||
HOST_STACK host
|
||||
[exit 0]
|
||||
@@ -0,0 +1,2 @@
|
||||
DOCKER_NETWORK_DEFAULT _testhost
|
||||
[exit 0]
|
||||
@@ -0,0 +1,2 @@
|
||||
DOCKER_NETWORK_PRIVATE tester-local
|
||||
[exit 0]
|
||||
@@ -0,0 +1,2 @@
|
||||
DOCKER_NETWORK_PUBLIC testhost
|
||||
[exit 0]
|
||||
@@ -0,0 +1,2 @@
|
||||
COMPOSE_PROJECT_NAME testhost
|
||||
[exit 0]
|
||||
@@ -0,0 +1,2 @@
|
||||
COMPOSE_PROJECT_NAME testhost
|
||||
[exit 0]
|
||||
@@ -0,0 +1,2 @@
|
||||
STACK_DIR @MYOS@/stack @HOME@/.local/share/myos/stack @WD@/stack
|
||||
[exit 0]
|
||||
@@ -0,0 +1,2 @@
|
||||
COMPOSE_FILE_SUFFIX app labels networks ssh volumes
|
||||
[exit 0]
|
||||
@@ -0,0 +1,3 @@
|
||||
make -o docker-stack-ps MAKE_OLDFILE=docker-stack-ps ENV=local DOCKER_COMPOSE=docker --log-level=error compose docker-compose-ps STACK=host/consul APP_NAME=host
|
||||
docker --log-level=error compose --ansi=auto -f @WD@/stack/host/consul.yml -f @MYOS@/stack/myos/networks.yml -p testhost ps
|
||||
[exit 0]
|
||||
@@ -0,0 +1,4 @@
|
||||
make -o stack-host-config MAKE_OLDFILE=stack-host-config ENV=local DOCKER_COMPOSE=docker --log-level=error compose COMPOSE_IGNORE_ORPHANS=true host=host/consul host/fabio host/registrator config STACK=host
|
||||
make -o stack-host-config MAKE_OLDFILE=stack-host-config ENV=local DOCKER_COMPOSE=docker --log-level=error compose docker-compose-config STACK=host APP_NAME=host
|
||||
docker --log-level=error compose --ansi=auto -f @WD@/stack/host/consul.yml -f @WD@/stack/host/fabio.yml -f @WD@/stack/host/registrator.yml -f @MYOS@/stack/myos/networks.yml -p testhost config
|
||||
[exit 0]
|
||||
@@ -0,0 +1,14 @@
|
||||
make -o host MAKE_OLDFILE=host ENV=local DOCKER_COMPOSE=docker --log-level=error compose up STACK=host/consul host/fabio host/registrator
|
||||
make -o host MAKE_OLDFILE=host ENV=local DOCKER_COMPOSE=docker --log-level=error compose docker-compose-up STACK=host/consul APP_NAME=host
|
||||
sh -c docker network create tester-local >/dev/null 2>&1
|
||||
sh -c docker network create testhost >/dev/null 2>&1
|
||||
docker --log-level=error compose --ansi=auto -f @WD@/stack/host/consul.yml -f @MYOS@/stack/myos/networks.yml -p testhost up -d
|
||||
make -o host MAKE_OLDFILE=host ENV=local DOCKER_COMPOSE=docker --log-level=error compose docker-compose-up STACK=host/fabio APP_NAME=host
|
||||
sh -c docker network create tester-local >/dev/null 2>&1
|
||||
sh -c docker network create testhost >/dev/null 2>&1
|
||||
docker --log-level=error compose --ansi=auto -f @WD@/stack/host/fabio.yml -f @MYOS@/stack/myos/networks.yml -p testhost up -d
|
||||
make -o host MAKE_OLDFILE=host ENV=local DOCKER_COMPOSE=docker --log-level=error compose docker-compose-up STACK=host/registrator APP_NAME=host
|
||||
sh -c docker network create tester-local >/dev/null 2>&1
|
||||
sh -c docker network create testhost >/dev/null 2>&1
|
||||
docker --log-level=error compose --ansi=auto -f @WD@/stack/host/registrator.yml -f @MYOS@/stack/myos/networks.yml -p testhost up -d
|
||||
[exit 0]
|
||||
@@ -0,0 +1,5 @@
|
||||
make -o docker-stack-up MAKE_OLDFILE=docker-stack-up ENV=local DOCKER_COMPOSE=docker --log-level=error compose docker-compose-up STACK=host/consul APP_NAME=host
|
||||
sh -c docker network create tester-local >/dev/null 2>&1
|
||||
sh -c docker network create testhost >/dev/null 2>&1
|
||||
docker --log-level=error compose --ansi=auto -f @WD@/stack/host/consul.yml -f @MYOS@/stack/myos/networks.yml -p testhost up -d
|
||||
[exit 0]
|
||||
@@ -0,0 +1,5 @@
|
||||
make -o docker-stack-up MAKE_OLDFILE=docker-stack-up ENV=local DOCKER_COMPOSE=docker --log-level=error compose docker-compose-up STACK=host APP_NAME=host
|
||||
sh -c docker network create tester-local >/dev/null 2>&1
|
||||
sh -c docker network create testhost >/dev/null 2>&1
|
||||
docker --log-level=error compose --ansi=auto -f @WD@/stack/host/consul.yml -f @WD@/stack/host/fabio.yml -f @WD@/stack/host/registrator.yml -f @MYOS@/stack/myos/networks.yml -p testhost up -d
|
||||
[exit 0]
|
||||
@@ -0,0 +1,9 @@
|
||||
make -o docker-stack-up MAKE_OLDFILE=docker-stack-up ENV=local DOCKER_COMPOSE=docker --log-level=error compose docker-compose-up STACK=host/consul APP_NAME=host
|
||||
sh -c docker network create tester-local >/dev/null 2>&1
|
||||
sh -c docker network create testhost >/dev/null 2>&1
|
||||
docker --log-level=error compose --ansi=auto -f @WD@/stack/host/consul.yml -f @WD@/stack/host/fabio.yml -f @MYOS@/stack/myos/networks.yml -p testhost up -d
|
||||
make -o docker-stack-up MAKE_OLDFILE=docker-stack-up ENV=local DOCKER_COMPOSE=docker --log-level=error compose docker-compose-up STACK=host/fabio APP_NAME=host
|
||||
sh -c docker network create tester-local >/dev/null 2>&1
|
||||
sh -c docker network create testhost >/dev/null 2>&1
|
||||
docker --log-level=error compose --ansi=auto -f @WD@/stack/host/consul.yml -f @WD@/stack/host/fabio.yml -f @MYOS@/stack/myos/networks.yml -p testhost up -d
|
||||
[exit 0]
|
||||
@@ -0,0 +1,3 @@
|
||||
make -o docker-stack-config MAKE_OLDFILE=docker-stack-config ENV=local DOCKER_COMPOSE=docker --log-level=error compose app-wd-config
|
||||
docker --log-level=error compose --ansi=auto -f ././docker-compose.yml -f ././docker-compose.local.yml -f ./docker/docker-compose.yml -p tester-wd-local config
|
||||
[exit 0]
|
||||
@@ -0,0 +1,3 @@
|
||||
make -o docker-stack-down MAKE_OLDFILE=docker-stack-down ENV=local DOCKER_COMPOSE=docker --log-level=error compose app-wd-down
|
||||
docker --log-level=error compose --ansi=auto -f ././docker-compose.yml -f ././docker-compose.local.yml -f ./docker/docker-compose.yml -p tester-wd-local down
|
||||
[exit 0]
|
||||
@@ -0,0 +1,2 @@
|
||||
APP wd
|
||||
[exit 0]
|
||||
@@ -0,0 +1,2 @@
|
||||
COMPOSE_FILE ./docker-compose.yml ./docker-compose.local.yml docker/docker-compose.yml
|
||||
[exit 0]
|
||||
@@ -0,0 +1,2 @@
|
||||
ENV_VARS DOCKER_NETWORK_DEFAULT DOCKER_NETWORK_PRIVATE DOCKER_NETWORK_PUBLIC DRONE_SERVER_HOST
|
||||
[exit 0]
|
||||
@@ -0,0 +1,2 @@
|
||||
DOCKER_NETWORK_DEFAULT _tester-wd-local
|
||||
[exit 0]
|
||||
@@ -0,0 +1,2 @@
|
||||
COMPOSE_PROJECT_NAME tester-wd-local
|
||||
[exit 0]
|
||||
@@ -0,0 +1,2 @@
|
||||
COMPOSE_SERVICE_NAME tester-wd-local
|
||||
[exit 0]
|
||||
@@ -0,0 +1,3 @@
|
||||
make -o docker-stack-ps MAKE_OLDFILE=docker-stack-ps ENV=local DOCKER_COMPOSE=docker --log-level=error compose app-wd-ps
|
||||
docker --log-level=error compose --ansi=auto -f ././docker-compose.yml -f ././docker-compose.local.yml -f ./docker/docker-compose.yml -p tester-wd-local ps
|
||||
[exit 0]
|
||||
@@ -0,0 +1,5 @@
|
||||
make -o docker-stack-up MAKE_OLDFILE=docker-stack-up ENV=local DOCKER_COMPOSE=docker --log-level=error compose docker-compose-up STACK=postgres APP_NAME=postgres
|
||||
sh -c docker network create tester-local >/dev/null 2>&1
|
||||
sh -c docker network create testhost >/dev/null 2>&1
|
||||
docker --log-level=error compose --ansi=auto -f ./docker-compose.yml -f ./docker-compose.local.yml -f docker/docker-compose.yml -p tester-postgres-local up -d
|
||||
[exit 0]
|
||||
@@ -0,0 +1,2 @@
|
||||
WARNING: wd[0] doesnotexist-rule-exists: target doesnotexist unavailable in app wd
|
||||
[exit 0]
|
||||
@@ -0,0 +1,3 @@
|
||||
make -o docker-stack-up MAKE_OLDFILE=docker-stack-up ENV=master DOCKER_COMPOSE=docker --log-level=error compose app-wd-up
|
||||
docker --log-level=error compose --ansi=auto -f ././docker-compose.yml -f ./docker/docker-compose.yml -p tester-wd-master up -d
|
||||
[exit 0]
|
||||
@@ -0,0 +1,3 @@
|
||||
make -o docker-stack-up MAKE_OLDFILE=docker-stack-up ENV=local DOCKER_COMPOSE=docker --log-level=error compose app-wd-up
|
||||
docker --log-level=error compose --ansi=auto -f ././docker-compose.yml -f ././docker-compose.local.yml -f ./docker/docker-compose.yml -p tester-wd-local up -d
|
||||
[exit 0]
|
||||
@@ -0,0 +1,52 @@
|
||||
Usage:
|
||||
make [target]
|
||||
|
||||
Targets:
|
||||
test Run unit + golden tests
|
||||
test-unit Run unit tests only
|
||||
test-golden Run golden tests only (MYOS_ENGINE=legacy|cli)
|
||||
test-integration Run tests needing a real docker daemon
|
||||
golden-record Re-record golden expectations from the legacy engine
|
||||
lint shellcheck all shell sources
|
||||
help This help
|
||||
attach Attach to docker SERVICE
|
||||
bootstrap Configure system
|
||||
build Build application docker images
|
||||
clean Clean application and docker stuffs
|
||||
config View application docker compose file
|
||||
connect Connect to docker SERVICE
|
||||
deploy Deploy application dockers
|
||||
down Remove application dockers
|
||||
exec Exec command in docker SERVICE
|
||||
install Install application
|
||||
logs Display application dockers logs
|
||||
rebuild Rebuild application dockers images
|
||||
reinstall Reinstall application
|
||||
release Create release VERSION
|
||||
restart Restart application
|
||||
run Run a command in a new docker
|
||||
scale Scale SERVICE application to NUM dockers
|
||||
shutdown Shutdown all dockers
|
||||
start Start application dockers
|
||||
stop Stop application dockers
|
||||
tests Test application
|
||||
up Create application dockers
|
||||
update Update application files
|
||||
upgrade Upgrade application
|
||||
ssh Connect to first remote host
|
||||
|
||||
Context:
|
||||
ENV local
|
||||
ENV_PATH @WD@
|
||||
DOCKER_MACHINE x86_64
|
||||
DOCKER_SOCKET_LOCATION /var/run/docker.sock
|
||||
DOCKER_SYSTEM Linux
|
||||
DOMAIN example.test
|
||||
APP myos
|
||||
APPS c411 dsh myos wbr wbr.old
|
||||
BRANCH lightning
|
||||
VERSION legacy-1.0-beta
|
||||
RELEASE
|
||||
COMPOSE_FILE @MYOS@/stack/myos/networks.yml
|
||||
DOCKER_REPOSITORY tester/myos/local
|
||||
[exit 0]
|
||||
@@ -0,0 +1,2 @@
|
||||
APP myos
|
||||
[exit 0]
|
||||
@@ -0,0 +1,2 @@
|
||||
COMPOSE_PROJECT_NAME tester-myos-local
|
||||
[exit 0]
|
||||
@@ -0,0 +1,5 @@
|
||||
make -o docker-stack-up MAKE_OLDFILE=docker-stack-up ENV=local DOCKER_COMPOSE=docker --log-level=error compose docker-compose-up STACK=myos APP_NAME=myos
|
||||
sh -c docker network create tester-local >/dev/null 2>&1
|
||||
sh -c docker network create testhost >/dev/null 2>&1
|
||||
docker --log-level=error compose --ansi=auto -f @MYOS@/stack/myos/networks.yml -p tester-myos-local up -d
|
||||
[exit 0]
|
||||
@@ -0,0 +1,32 @@
|
||||
#shellcheck shell=sh
|
||||
# Golden tests: every case of cases.txt must produce the recorded output.
|
||||
# MYOS_ENGINE=legacy (default) runs the make engine, MYOS_ENGINE=cli runs bin/myos.
|
||||
# For the cli engine, spec/golden/expected.cli/<case>.txt overrides the legacy
|
||||
# expectation when a delta is intentional (documented in DELTAS.md).
|
||||
Describe 'golden'
|
||||
engine=${MYOS_ENGINE:-legacy}
|
||||
expected_file() {
|
||||
if [ "$engine" = cli ] && [ -f "$SHELLSPEC_PROJECT_ROOT/spec/golden/expected.cli/$1.txt" ]; then
|
||||
printf '%s\n' "$SHELLSPEC_PROJECT_ROOT/spec/golden/expected.cli/$1.txt"
|
||||
else
|
||||
printf '%s\n' "$SHELLSPEC_PROJECT_ROOT/spec/golden/expected/$1.txt"
|
||||
fi
|
||||
}
|
||||
run_case() {
|
||||
sb=$(myos_sandbox "$2")
|
||||
eval "set -- $3"
|
||||
myos_run_engine "$engine" "$sb" "$@"
|
||||
rm -rf "$sb"
|
||||
}
|
||||
Parameters:dynamic
|
||||
while IFS='|' read -r name fixture args; do
|
||||
name=$(echo "$name" | tr -d ' '); fixture=$(echo "$fixture" | tr -d ' ')
|
||||
[ -z "$name" ] || [ "${name#\#}" != "$name" ] && continue
|
||||
%data "$name" "$fixture" "$args"
|
||||
done < "$SHELLSPEC_PROJECT_ROOT/spec/golden/cases.txt"
|
||||
End
|
||||
It "matches recorded output: $1 ($engine)"
|
||||
When call run_case "$1" "$2" "$3"
|
||||
The output should equal "$(cat "$(expected_file "$1")")"
|
||||
End
|
||||
End
|
||||
Executable
+18
@@ -0,0 +1,18 @@
|
||||
#!/bin/sh
|
||||
# Record golden outputs of the LEGACY make engine into spec/golden/expected/.
|
||||
# Usage: spec/golden/record.sh [case-name ...]
|
||||
set -u
|
||||
here=$(cd "$(dirname "$0")" && pwd)
|
||||
. "$here/../support/run.sh"
|
||||
MYOS_ROOT=${MYOS_ROOT:-$(cd "$here/../.." && pwd)}
|
||||
only="$*"
|
||||
grep -v '^#' "$here/cases.txt" | while IFS='|' read -r name fixture args; do
|
||||
name=$(echo "$name" | tr -d ' '); fixture=$(echo "$fixture" | tr -d ' ')
|
||||
[ -z "$name" ] && continue
|
||||
if [ -n "$only" ]; then case " $only " in *" $name "*) ;; *) continue ;; esac; fi
|
||||
sb=$(myos_sandbox "$fixture")
|
||||
eval "set -- $args"
|
||||
myos_run_engine legacy "$sb" "$@" > "$here/expected/$name.txt"
|
||||
rm -rf "$sb"
|
||||
printf 'recorded %s (%s lines)\n' "$name" "$(wc -l < "$here/expected/$name.txt" | tr -d ' ')"
|
||||
done
|
||||
@@ -0,0 +1,6 @@
|
||||
#shellcheck shell=sh
|
||||
# shellspec helper: loaded before every spec file.
|
||||
MYOS_ROOT=${MYOS_ROOT:-$SHELLSPEC_PROJECT_ROOT}
|
||||
SPEC_DIR=$MYOS_ROOT/spec
|
||||
export MYOS_ROOT SPEC_DIR
|
||||
. "$SPEC_DIR/support/run.sh"
|
||||
Executable
+18
@@ -0,0 +1,18 @@
|
||||
#!/bin/sh
|
||||
# Mock docker for myos tests: logs every call, answers a few read-only queries deterministically.
|
||||
[ -n "${MYOS_DOCKER_LOG:-}" ] && printf 'docker %s\n' "$*" >> "$MYOS_DOCKER_LOG"
|
||||
case "$1 $2" in
|
||||
"compose version") echo "${MOCK_COMPOSE_VERSION:-2.29.0}" ;;
|
||||
"compose config") echo "# mock compose config" ;;
|
||||
"compose ps") : ;;
|
||||
"compose "*) : ;;
|
||||
"info --format") echo "${MOCK_SWARM_STATE:-inactive}" ;;
|
||||
"run --rm") case "$*" in *"uname -m"*) echo x86_64 ;; *"uname -s"*) echo Linux ;; *) : ;; esac ;;
|
||||
"images -q") : ;;
|
||||
"ps -q") : ;;
|
||||
"network ls") : ;;
|
||||
"volume ls") : ;;
|
||||
"version --format") echo 29.0.0 ;;
|
||||
*) : ;;
|
||||
esac
|
||||
exit 0
|
||||
Executable
+4
@@ -0,0 +1,4 @@
|
||||
#!/bin/sh
|
||||
[ -n "${MYOS_DOCKER_LOG:-}" ] && printf 'docker-compose %s\n' "$*" >> "$MYOS_DOCKER_LOG"
|
||||
case "$1" in version) echo "${MOCK_COMPOSE_VERSION:-2.29.0}" ;; config) echo "# mock compose config" ;; *) : ;; esac
|
||||
exit 0
|
||||
@@ -0,0 +1,67 @@
|
||||
#!/bin/sh
|
||||
# Helpers shared by the golden recorder and the shellspec suites.
|
||||
# myos_run_engine ENGINE WORKDIR ARGS... runs myos (legacy make engine or bin/myos CLI)
|
||||
# in a hermetic environment and prints normalized stdout+stderr followed by "[exit N]".
|
||||
|
||||
MYOS_ROOT="${MYOS_ROOT:-$(cd "$(dirname "$0")/../.." 2>/dev/null && pwd)}"
|
||||
SPEC_DIR="${SPEC_DIR:-$MYOS_ROOT/spec}"
|
||||
|
||||
# myos_sandbox FIXTURE -> prints a temp dir containing a copy of the fixture (wd/) and of the home fixture (home/)
|
||||
myos_sandbox() {
|
||||
_fixture=$1
|
||||
_tmp=$(mktemp -d "${TMPDIR:-/tmp}/myos-spec.XXXXXX"); _tmp=$(cd "$_tmp" && pwd -P)
|
||||
cp -R "$SPEC_DIR/fixtures/$_fixture" "$_tmp/wd"
|
||||
cp -R "$SPEC_DIR/fixtures/home" "$_tmp/home"
|
||||
printf '%s\n' "$_tmp"
|
||||
}
|
||||
|
||||
# myos_hermetic_env SANDBOX -> prints the env(1) arguments for a hermetic run
|
||||
myos_hermetic_env() {
|
||||
printf '%s\n' \
|
||||
"PATH=$SPEC_DIR/support/bin:/usr/bin:/bin:/usr/sbin:/sbin" \
|
||||
"HOME=$1/home" \
|
||||
"USER=tester" "HOSTNAME=testhost" "DOMAIN=example.test" \
|
||||
"DOCKER_MACHINE=x86_64" "DOCKER_SYSTEM=Linux" "DOCKER_SOCKET_LOCATION=/var/run/docker.sock" \
|
||||
"DRYRUN=true" "TERM=dumb" "LANG=C" "LC_ALL=C" \
|
||||
"MYOS_DOCKER_LOG=$1/docker.log"
|
||||
}
|
||||
|
||||
# myos_normalize SANDBOX (stdin -> stdout)
|
||||
myos_normalize() {
|
||||
sed -e 's/\x1b\[[0-9;]*m//g' \
|
||||
-e "s#$MYOS_ROOT#@MYOS@#g" \
|
||||
-e "s#$1/wd#@WD@#g" \
|
||||
-e "s#$1/home#@HOME@#g" \
|
||||
-e "s#$1#@TMP@#g" \
|
||||
-e 's#/[^ ]*/bin/make#make#g' \
|
||||
-e 's/[[:space:]][[:space:]]*/ /g' \
|
||||
-e 's/[[:space:]]*$//'
|
||||
}
|
||||
|
||||
# myos_run_engine ENGINE SANDBOX ARGS...
|
||||
# shellcheck disable=SC2046 # myos_hermetic_env output is meant to be word-split
|
||||
myos_run_engine() {
|
||||
_engine=$1; _sb=$2; shift 2
|
||||
# "@make" as first arg = include mode: the project Makefile includes make/include.mk
|
||||
# and make runs from the project dir (CURDIR = project). Same for both engines.
|
||||
if [ "${1:-}" = "@make" ]; then
|
||||
shift
|
||||
_out=$(cd "$_sb/wd" && env -i $(myos_hermetic_env "$_sb") MYOS_CONF=/dev/null \
|
||||
make -es MYOS="$MYOS_ROOT" "$@" 2>&1); _rc=$?
|
||||
printf '%s\n[exit %s]\n' "$_out" "$_rc" | myos_normalize "$_sb"
|
||||
return 0
|
||||
fi
|
||||
case $_engine in
|
||||
legacy)
|
||||
# what /usr/local/bin/myos does: env from system conf + MYOS=. WORKDIR=$PWD make -esC $MYOS
|
||||
_out=$(cd "$_sb/wd" && env -i $(myos_hermetic_env "$_sb") \
|
||||
make -esC "$MYOS_ROOT" MYOS=. WORKDIR="$_sb/wd" "$@" 2>&1); _rc=$?
|
||||
;;
|
||||
cli)
|
||||
_out=$(cd "$_sb/wd" && env -i $(myos_hermetic_env "$_sb") MYOS_CONF=/dev/null \
|
||||
"$MYOS_ROOT/bin/myos" -C "$_sb/wd" "$@" 2>&1); _rc=$?
|
||||
;;
|
||||
*) echo "unknown engine $_engine" >&2; return 2 ;;
|
||||
esac
|
||||
printf '%s\n[exit %s]\n' "$_out" "$_rc" | myos_normalize "$_sb"
|
||||
}
|
||||
Reference in New Issue
Block a user