integration: re-add docker-compose.yml
overloading the outer docker-compose.yml for both dev and test started to feel more confusing than just keeping them separate. namely, it's impossible to un-set 'build:' in an override file, so I split that out into a docker-compose.override.yml file, symlinked under hack/overrides/ to keep ./hack/dc working, but then having the tests *not* use it, even though they use the docker-compose.yml right next to it, and even though it's normally respected by 'docker-compose' commands. Signed-off-by: Alex Suraci <suraci.alex@gmail.com>
This commit is contained in:
parent
43d37e27a7
commit
d76b5923eb
|
@ -10,6 +10,7 @@ web/public/elm.min.js
|
||||||
web/public/bundle.js
|
web/public/bundle.js
|
||||||
web/public/*.bundle.js
|
web/public/*.bundle.js
|
||||||
web/public/main.css
|
web/public/main.css
|
||||||
|
docker-compose.override.yml
|
||||||
*.coverprofile
|
*.coverprofile
|
||||||
*.coverprofile.*
|
*.coverprofile.*
|
||||||
*.test
|
*.test
|
||||||
|
|
|
@ -1 +0,0 @@
|
||||||
./hack/overrides/dev.yml
|
|
|
@ -4,7 +4,7 @@ services:
|
||||||
db:
|
db:
|
||||||
image: postgres:${POSTGRES_TAG:-latest}
|
image: postgres:${POSTGRES_TAG:-latest}
|
||||||
shm_size: 1gb
|
shm_size: 1gb
|
||||||
ports: [5432]
|
ports: [6543:5432]
|
||||||
environment:
|
environment:
|
||||||
POSTGRES_DB: concourse
|
POSTGRES_DB: concourse
|
||||||
POSTGRES_USER: dev
|
POSTGRES_USER: dev
|
||||||
|
@ -15,8 +15,10 @@ services:
|
||||||
image: concourse/concourse:local
|
image: concourse/concourse:local
|
||||||
command: web
|
command: web
|
||||||
depends_on: [db]
|
depends_on: [db]
|
||||||
ports: [8080]
|
ports: [8080:8080]
|
||||||
volumes: ["./hack/keys:/concourse-keys"]
|
volumes:
|
||||||
|
- .:/src
|
||||||
|
- "./hack/keys:/concourse-keys"
|
||||||
environment:
|
environment:
|
||||||
CONCOURSE_SESSION_SIGNING_KEY: /concourse-keys/session_signing_key
|
CONCOURSE_SESSION_SIGNING_KEY: /concourse-keys/session_signing_key
|
||||||
CONCOURSE_TSA_AUTHORIZED_KEYS: /concourse-keys/authorized_worker_keys
|
CONCOURSE_TSA_AUTHORIZED_KEYS: /concourse-keys/authorized_worker_keys
|
||||||
|
@ -40,6 +42,9 @@ services:
|
||||||
command: worker
|
command: worker
|
||||||
privileged: true
|
privileged: true
|
||||||
depends_on: [web]
|
depends_on: [web]
|
||||||
|
ports:
|
||||||
|
- 7777:7777
|
||||||
|
- 7788:7788
|
||||||
volumes: ["./hack/keys:/concourse-keys"]
|
volumes: ["./hack/keys:/concourse-keys"]
|
||||||
stop_signal: SIGUSR2
|
stop_signal: SIGUSR2
|
||||||
environment:
|
environment:
|
||||||
|
@ -49,6 +54,9 @@ services:
|
||||||
CONCOURSE_LOG_LEVEL: debug
|
CONCOURSE_LOG_LEVEL: debug
|
||||||
CONCOURSE_TSA_HOST: web:2222
|
CONCOURSE_TSA_HOST: web:2222
|
||||||
|
|
||||||
|
CONCOURSE_BIND_IP: 0.0.0.0
|
||||||
|
CONCOURSE_BAGGAGECLAIM_BIND_IP: 0.0.0.0
|
||||||
|
|
||||||
# avoid using loopbacks
|
# avoid using loopbacks
|
||||||
CONCOURSE_BAGGAGECLAIM_DRIVER: overlay
|
CONCOURSE_BAGGAGECLAIM_DRIVER: overlay
|
||||||
|
|
||||||
|
|
|
@ -1,18 +0,0 @@
|
||||||
version: '3'
|
|
||||||
|
|
||||||
services:
|
|
||||||
db:
|
|
||||||
ports: [6543:5432]
|
|
||||||
|
|
||||||
web:
|
|
||||||
ports: [8080:8080]
|
|
||||||
volumes:
|
|
||||||
- .:/src
|
|
||||||
|
|
||||||
worker:
|
|
||||||
ports:
|
|
||||||
- 7777:7777
|
|
||||||
- 7788:7788
|
|
||||||
environment:
|
|
||||||
CONCOURSE_BIND_IP: 0.0.0.0
|
|
||||||
CONCOURSE_BAGGAGECLAIM_BIND_IP: 0.0.0.0
|
|
|
@ -3,7 +3,7 @@ version: '3'
|
||||||
services:
|
services:
|
||||||
web:
|
web:
|
||||||
volumes:
|
volumes:
|
||||||
- ./hack/vault/certs:/vault-certs
|
- ../hack/vault/certs:/vault-certs
|
||||||
environment:
|
environment:
|
||||||
CONCOURSE_VAULT_URL: https://vault:8200
|
CONCOURSE_VAULT_URL: https://vault:8200
|
||||||
CONCOURSE_VAULT_AUTH_BACKEND: cert
|
CONCOURSE_VAULT_AUTH_BACKEND: cert
|
||||||
|
@ -16,8 +16,8 @@ services:
|
||||||
cap_add: [IPC_LOCK]
|
cap_add: [IPC_LOCK]
|
||||||
ports: [8200]
|
ports: [8200]
|
||||||
volumes:
|
volumes:
|
||||||
- ./hack/vault/certs:/vault/certs
|
- ../hack/vault/certs:/vault/certs
|
||||||
- ./hack/vault/config:/vault/config
|
- ../hack/vault/config:/vault/config
|
||||||
command: server
|
command: server
|
||||||
environment:
|
environment:
|
||||||
# for running the 'vault' CLI
|
# for running the 'vault' CLI
|
||||||
|
|
|
@ -14,7 +14,7 @@ import (
|
||||||
func TestVault(t *testing.T) {
|
func TestVault(t *testing.T) {
|
||||||
t.Parallel()
|
t.Parallel()
|
||||||
|
|
||||||
dc := dctest.Init(t, "../../docker-compose.yml", "overrides/vault.yml")
|
dc := dctest.Init(t, "../docker-compose.yml", "overrides/vault.yml")
|
||||||
require.NoError(t, dc.Run("up", "-d"))
|
require.NoError(t, dc.Run("up", "-d"))
|
||||||
|
|
||||||
vault := vaulttest.Init(t, dc)
|
vault := vaulttest.Init(t, dc)
|
||||||
|
|
|
@ -0,0 +1,57 @@
|
||||||
|
version: '3'
|
||||||
|
|
||||||
|
services:
|
||||||
|
db:
|
||||||
|
image: ${TEST_POSTGRES_IMAGE:-postgres}
|
||||||
|
shm_size: 1gb
|
||||||
|
ports: [5432]
|
||||||
|
environment:
|
||||||
|
POSTGRES_DB: concourse
|
||||||
|
POSTGRES_USER: dev
|
||||||
|
POSTGRES_PASSWORD: dev
|
||||||
|
|
||||||
|
web:
|
||||||
|
image: ${TEST_CONCOURSE_DEV_IMAGE:-concourse/concourse:local}
|
||||||
|
command: web
|
||||||
|
depends_on: [db]
|
||||||
|
ports: [8080]
|
||||||
|
volumes:
|
||||||
|
- ..:/src
|
||||||
|
- ../hack/keys:/concourse-keys
|
||||||
|
environment:
|
||||||
|
CONCOURSE_SESSION_SIGNING_KEY: /concourse-keys/session_signing_key
|
||||||
|
CONCOURSE_TSA_AUTHORIZED_KEYS: /concourse-keys/authorized_worker_keys
|
||||||
|
CONCOURSE_TSA_HOST_KEY: /concourse-keys/tsa_host_key
|
||||||
|
|
||||||
|
CONCOURSE_LOG_LEVEL: debug
|
||||||
|
CONCOURSE_POSTGRES_HOST: db
|
||||||
|
CONCOURSE_POSTGRES_USER: dev
|
||||||
|
CONCOURSE_POSTGRES_PASSWORD: dev
|
||||||
|
CONCOURSE_POSTGRES_DATABASE: concourse
|
||||||
|
CONCOURSE_EXTERNAL_URL: http://localhost:8080
|
||||||
|
CONCOURSE_ADD_LOCAL_USER: test:test,guest:guest
|
||||||
|
CONCOURSE_MAIN_TEAM_LOCAL_USER: test
|
||||||
|
CONCOURSE_CLUSTER_NAME: test
|
||||||
|
CONCOURSE_ENABLE_PIPELINE_INSTANCES: "true"
|
||||||
|
CONCOURSE_ENABLE_ACROSS_STEP: "true"
|
||||||
|
|
||||||
|
worker:
|
||||||
|
image: ${TEST_CONCOURSE_DEV_IMAGE:-concourse/concourse:local}
|
||||||
|
command: worker
|
||||||
|
privileged: true
|
||||||
|
depends_on: [web]
|
||||||
|
ports: [7777, 7788]
|
||||||
|
volumes: ["../hack/keys:/concourse-keys"]
|
||||||
|
stop_signal: SIGUSR2
|
||||||
|
environment:
|
||||||
|
CONCOURSE_TSA_PUBLIC_KEY: /concourse-keys/tsa_host_key.pub
|
||||||
|
CONCOURSE_TSA_WORKER_PRIVATE_KEY: /concourse-keys/worker_key
|
||||||
|
|
||||||
|
CONCOURSE_LOG_LEVEL: debug
|
||||||
|
CONCOURSE_TSA_HOST: web:2222
|
||||||
|
|
||||||
|
# avoid using loopbacks
|
||||||
|
CONCOURSE_BAGGAGECLAIM_DRIVER: overlay
|
||||||
|
|
||||||
|
# work with docker-compose's dns
|
||||||
|
CONCOURSE_GARDEN_DNS_PROXY_ENABLE: "true"
|
|
@ -19,9 +19,11 @@ type Cmd struct {
|
||||||
cmdtest.Cmd
|
cmdtest.Cmd
|
||||||
}
|
}
|
||||||
|
|
||||||
func Init(t *testing.T, files ...string) Cmd {
|
func Init(t *testing.T, composeFile string, overrides ...string) Cmd {
|
||||||
name := filepath.Base(t.Name())
|
name := filepath.Base(t.Name())
|
||||||
|
|
||||||
|
files := append([]string{composeFile}, overrides...)
|
||||||
|
|
||||||
dc := cmdtest.Cmd{
|
dc := cmdtest.Cmd{
|
||||||
Path: "docker-compose",
|
Path: "docker-compose",
|
||||||
Env: []string{
|
Env: []string{
|
||||||
|
|
|
@ -12,87 +12,41 @@ import (
|
||||||
func TestDowngrade(t *testing.T) {
|
func TestDowngrade(t *testing.T) {
|
||||||
t.Parallel()
|
t.Parallel()
|
||||||
|
|
||||||
dc := dctest.Init(t, "../../docker-compose.yml")
|
devDC := dctest.Init(t, "../docker-compose.yml")
|
||||||
|
|
||||||
t.Run("deploy dev", func(t *testing.T) {
|
t.Run("deploy dev", func(t *testing.T) {
|
||||||
require.NoError(t, dc.Run("up", "-d"))
|
require.NoError(t, devDC.Run("up", "-d"))
|
||||||
})
|
})
|
||||||
|
|
||||||
fly := flytest.Init(t, dc)
|
fly := flytest.Init(t, devDC)
|
||||||
setupUpgradeDowngrade(t, fly)
|
setupUpgradeDowngrade(t, fly)
|
||||||
|
|
||||||
latestDC := dctest.Init(t, "../../docker-compose.yml", "overrides/latest.yml")
|
latestDC := dctest.Init(t, "../docker-compose.yml", "overrides/latest.yml")
|
||||||
|
|
||||||
latest, err := latestDC.Output("run", "web", "migrate", "--supported-db-version")
|
t.Run("migrate down to latest from clean deploy", func(t *testing.T) {
|
||||||
require.NoError(t, err)
|
|
||||||
latest = strings.TrimRight(latest, "\n")
|
|
||||||
|
|
||||||
t.Run("down migrations", func(t *testing.T) {
|
|
||||||
// just to see what it was before
|
// just to see what it was before
|
||||||
err := dc.Run("run", "web", "migrate", "--current-db-version")
|
err := devDC.Run("run", "web", "migrate", "--current-db-version")
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
err = dc.Run("run", "web", "migrate", "--migrate-db-to-version", latest)
|
latest, err := latestDC.Output("run", "web", "migrate", "--supported-db-version")
|
||||||
|
require.NoError(t, err)
|
||||||
|
latest = strings.TrimRight(latest, "\n")
|
||||||
|
|
||||||
|
err = devDC.Run("run", "web", "migrate", "--migrate-db-to-version", latest)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("downgrade to latest", func(t *testing.T) {
|
t.Run("deploy latest", func(t *testing.T) {
|
||||||
require.NoError(t, latestDC.Run("up", "-d"))
|
require.NoError(t, latestDC.Run("up", "-d"))
|
||||||
})
|
})
|
||||||
|
|
||||||
fly = flytest.Init(t, latestDC)
|
fly = flytest.Init(t, latestDC)
|
||||||
verifyUpgradeDowngrade(t, fly)
|
verifyUpgradeDowngrade(t, fly)
|
||||||
|
|
||||||
t.Run("upgrading after downgrade", func(t *testing.T) {
|
t.Run("migrate up to dev and deploy dev", func(t *testing.T) {
|
||||||
require.NoError(t, dc.Run("up", "-d"))
|
require.NoError(t, devDC.Run("up", "-d"))
|
||||||
})
|
})
|
||||||
|
|
||||||
fly = flytest.Init(t, dc)
|
fly = flytest.Init(t, devDC)
|
||||||
verifyUpgradeDowngrade(t, fly)
|
verifyUpgradeDowngrade(t, fly)
|
||||||
}
|
}
|
||||||
|
|
||||||
func setupUpgradeDowngrade(t *testing.T, fly flytest.Cmd) {
|
|
||||||
t.Run("set up test pipeline", func(t *testing.T) {
|
|
||||||
err := fly.Run("set-pipeline", "-p", "test", "-c", "pipelines/smoke-pipeline.yml", "-n")
|
|
||||||
require.NoError(t, err)
|
|
||||||
|
|
||||||
err = fly.Run("unpause-pipeline", "-p", "test")
|
|
||||||
require.NoError(t, err)
|
|
||||||
|
|
||||||
err = fly.Run("trigger-job", "-j", "test/say-hello", "-w")
|
|
||||||
require.NoError(t, err)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
func verifyUpgradeDowngrade(t *testing.T, fly flytest.Cmd) {
|
|
||||||
t.Run("pipeline and build still exists", func(t *testing.T) {
|
|
||||||
err := fly.Run("get-pipeline", "-p", "test")
|
|
||||||
require.NoError(t, err)
|
|
||||||
|
|
||||||
out, err := fly.Output("watch", "-j", "test/say-hello")
|
|
||||||
require.NoError(t, err)
|
|
||||||
require.Contains(t, out, "Hello, world!")
|
|
||||||
})
|
|
||||||
|
|
||||||
t.Run("can still run pipeline builds", func(t *testing.T) {
|
|
||||||
err := fly.Run("trigger-job", "-j", "test/say-hello", "-w")
|
|
||||||
require.NoError(t, err)
|
|
||||||
})
|
|
||||||
|
|
||||||
t.Run("can still run checks", func(t *testing.T) {
|
|
||||||
err := fly.Run("check-resource", "-r", "test/mockery")
|
|
||||||
require.NoError(t, err)
|
|
||||||
})
|
|
||||||
|
|
||||||
t.Run("can still reach the internet", func(t *testing.T) {
|
|
||||||
out, err := fly.Output("trigger-job", "-j", "test/use-the-internet", "-w")
|
|
||||||
require.NoError(t, err)
|
|
||||||
require.Contains(t, out, "Example Domain")
|
|
||||||
})
|
|
||||||
|
|
||||||
t.Run("can still run one-off builds", func(t *testing.T) {
|
|
||||||
out, err := fly.Output("execute", "-c", "tasks/hello.yml")
|
|
||||||
require.NoError(t, err)
|
|
||||||
require.Contains(t, out, "hello")
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
|
@ -0,0 +1,54 @@
|
||||||
|
package ops_test
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/concourse/concourse/integration/internal/flytest"
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
|
)
|
||||||
|
|
||||||
|
func setupUpgradeDowngrade(t *testing.T, fly flytest.Cmd) {
|
||||||
|
t.Run("set up test pipeline", func(t *testing.T) {
|
||||||
|
err := fly.Run("set-pipeline", "-p", "test", "-c", "pipelines/smoke-pipeline.yml", "-n")
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
err = fly.Run("unpause-pipeline", "-p", "test")
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
err = fly.Run("trigger-job", "-j", "test/say-hello", "-w")
|
||||||
|
require.NoError(t, err)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func verifyUpgradeDowngrade(t *testing.T, fly flytest.Cmd) {
|
||||||
|
t.Run("pipeline and build still exists", func(t *testing.T) {
|
||||||
|
err := fly.Run("get-pipeline", "-p", "test")
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
out, err := fly.Output("watch", "-j", "test/say-hello")
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Contains(t, out, "Hello, world!")
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("can still run pipeline builds", func(t *testing.T) {
|
||||||
|
err := fly.Run("trigger-job", "-j", "test/say-hello", "-w")
|
||||||
|
require.NoError(t, err)
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("can still run checks", func(t *testing.T) {
|
||||||
|
err := fly.Run("check-resource", "-r", "test/mockery")
|
||||||
|
require.NoError(t, err)
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("can still reach the internet", func(t *testing.T) {
|
||||||
|
out, err := fly.Output("trigger-job", "-j", "test/use-the-internet", "-w")
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Contains(t, out, "Example Domain")
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("can still run one-off builds", func(t *testing.T) {
|
||||||
|
out, err := fly.Output("execute", "-c", "tasks/hello.yml")
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Contains(t, out, "hello")
|
||||||
|
})
|
||||||
|
}
|
|
@ -11,21 +11,21 @@ import (
|
||||||
func TestUpgrade(t *testing.T) {
|
func TestUpgrade(t *testing.T) {
|
||||||
t.Parallel()
|
t.Parallel()
|
||||||
|
|
||||||
dc := dctest.Init(t, "../../docker-compose.yml", "overrides/latest.yml")
|
latestDC := dctest.Init(t, "../docker-compose.yml", "overrides/latest.yml")
|
||||||
|
|
||||||
t.Run("deploy latest", func(t *testing.T) {
|
t.Run("deploy latest", func(t *testing.T) {
|
||||||
require.NoError(t, dc.Run("up", "-d"))
|
require.NoError(t, latestDC.Run("up", "-d"))
|
||||||
})
|
})
|
||||||
|
|
||||||
fly := flytest.Init(t, dc)
|
fly := flytest.Init(t, latestDC)
|
||||||
setupUpgradeDowngrade(t, fly)
|
setupUpgradeDowngrade(t, fly)
|
||||||
|
|
||||||
dc = dctest.Init(t)
|
devDC := dctest.Init(t, "../docker-compose.yml")
|
||||||
|
|
||||||
t.Run("upgrade to dev", func(t *testing.T) {
|
t.Run("upgrade to dev", func(t *testing.T) {
|
||||||
require.NoError(t, dc.Run("up", "-d"))
|
require.NoError(t, devDC.Run("up", "-d"))
|
||||||
})
|
})
|
||||||
|
|
||||||
fly = flytest.Init(t, dc)
|
fly = flytest.Init(t, devDC)
|
||||||
verifyUpgradeDowngrade(t, fly)
|
verifyUpgradeDowngrade(t, fly)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue