diff --git a/.gitignore b/.gitignore index 218139f0e..22f1e19e5 100644 --- a/.gitignore +++ b/.gitignore @@ -10,6 +10,7 @@ web/public/elm.min.js web/public/bundle.js web/public/*.bundle.js web/public/main.css +docker-compose.override.yml *.coverprofile *.coverprofile.* *.test diff --git a/docker-compose.override.yml b/docker-compose.override.yml deleted file mode 120000 index 9268fc24b..000000000 --- a/docker-compose.override.yml +++ /dev/null @@ -1 +0,0 @@ -./hack/overrides/dev.yml \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index a9bab91f4..22e0ce6b9 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -4,7 +4,7 @@ services: db: image: postgres:${POSTGRES_TAG:-latest} shm_size: 1gb - ports: [5432] + ports: [6543:5432] environment: POSTGRES_DB: concourse POSTGRES_USER: dev @@ -15,8 +15,10 @@ services: image: concourse/concourse:local command: web depends_on: [db] - ports: [8080] - volumes: ["./hack/keys:/concourse-keys"] + ports: [8080: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 @@ -40,6 +42,9 @@ services: command: worker privileged: true depends_on: [web] + ports: + - 7777:7777 + - 7788:7788 volumes: ["./hack/keys:/concourse-keys"] stop_signal: SIGUSR2 environment: @@ -49,6 +54,9 @@ services: CONCOURSE_LOG_LEVEL: debug CONCOURSE_TSA_HOST: web:2222 + CONCOURSE_BIND_IP: 0.0.0.0 + CONCOURSE_BAGGAGECLAIM_BIND_IP: 0.0.0.0 + # avoid using loopbacks CONCOURSE_BAGGAGECLAIM_DRIVER: overlay diff --git a/hack/overrides/dev.yml b/hack/overrides/dev.yml deleted file mode 100644 index 7dbee651d..000000000 --- a/hack/overrides/dev.yml +++ /dev/null @@ -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 diff --git a/integration/creds/overrides/vault.yml b/integration/creds/overrides/vault.yml index 66eefc418..8bf3ac793 100644 --- a/integration/creds/overrides/vault.yml +++ b/integration/creds/overrides/vault.yml @@ -3,7 +3,7 @@ version: '3' services: web: volumes: - - ./hack/vault/certs:/vault-certs + - ../hack/vault/certs:/vault-certs environment: CONCOURSE_VAULT_URL: https://vault:8200 CONCOURSE_VAULT_AUTH_BACKEND: cert @@ -16,8 +16,8 @@ services: cap_add: [IPC_LOCK] ports: [8200] volumes: - - ./hack/vault/certs:/vault/certs - - ./hack/vault/config:/vault/config + - ../hack/vault/certs:/vault/certs + - ../hack/vault/config:/vault/config command: server environment: # for running the 'vault' CLI diff --git a/integration/creds/vault_test.go b/integration/creds/vault_test.go index 81f1395dd..40ad5ed30 100644 --- a/integration/creds/vault_test.go +++ b/integration/creds/vault_test.go @@ -14,7 +14,7 @@ import ( func TestVault(t *testing.T) { 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")) vault := vaulttest.Init(t, dc) diff --git a/integration/docker-compose.yml b/integration/docker-compose.yml new file mode 100644 index 000000000..bd75a9b5b --- /dev/null +++ b/integration/docker-compose.yml @@ -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" diff --git a/integration/internal/dctest/cmd.go b/integration/internal/dctest/cmd.go index 2fe8ecf53..b07e469e0 100644 --- a/integration/internal/dctest/cmd.go +++ b/integration/internal/dctest/cmd.go @@ -19,9 +19,11 @@ type Cmd struct { 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()) + files := append([]string{composeFile}, overrides...) + dc := cmdtest.Cmd{ Path: "docker-compose", Env: []string{ diff --git a/integration/ops/downgrade_test.go b/integration/ops/downgrade_test.go index 2b35d66a6..74861b4be 100644 --- a/integration/ops/downgrade_test.go +++ b/integration/ops/downgrade_test.go @@ -12,87 +12,41 @@ import ( func TestDowngrade(t *testing.T) { t.Parallel() - dc := dctest.Init(t, "../../docker-compose.yml") + devDC := dctest.Init(t, "../docker-compose.yml") 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) - 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") - require.NoError(t, err) - latest = strings.TrimRight(latest, "\n") - - t.Run("down migrations", func(t *testing.T) { + t.Run("migrate down to latest from clean deploy", func(t *testing.T) { // 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) - 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) }) - t.Run("downgrade to latest", func(t *testing.T) { + t.Run("deploy latest", func(t *testing.T) { require.NoError(t, latestDC.Run("up", "-d")) }) fly = flytest.Init(t, latestDC) verifyUpgradeDowngrade(t, fly) - t.Run("upgrading after downgrade", func(t *testing.T) { - require.NoError(t, dc.Run("up", "-d")) + t.Run("migrate up to dev and deploy dev", func(t *testing.T) { + require.NoError(t, devDC.Run("up", "-d")) }) - fly = flytest.Init(t, dc) + fly = flytest.Init(t, devDC) 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") - }) -} diff --git a/integration/ops/suite_test.go b/integration/ops/suite_test.go new file mode 100644 index 000000000..728433f91 --- /dev/null +++ b/integration/ops/suite_test.go @@ -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") + }) +} diff --git a/integration/ops/upgrade_test.go b/integration/ops/upgrade_test.go index 2ac81e116..14133d94f 100644 --- a/integration/ops/upgrade_test.go +++ b/integration/ops/upgrade_test.go @@ -11,21 +11,21 @@ import ( func TestUpgrade(t *testing.T) { 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) { - 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) - dc = dctest.Init(t) + devDC := dctest.Init(t, "../docker-compose.yml") 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) }