Skip to content

Commit be5d517

Browse files
committed
test: Use a template to prevent migrations from running for every test
1 parent 7cce7a9 commit be5d517

File tree

4 files changed

+66
-12
lines changed

4 files changed

+66
-12
lines changed

.github/workflows/coder.yaml

+14-1
Original file line numberDiff line numberDiff line change
@@ -293,8 +293,21 @@ jobs:
293293
sleep 0.5
294294
done
295295
296+
- name: Create Migration Template
297+
id: migrated
298+
run: |
299+
DB_FROM=$(go run scripts/migrate-ci/main.go)
300+
echo "::set-output name=db-from::$DB_FROM"
301+
echo $DB_FROM
302+
296303
- name: Test with PostgreSQL Database
297-
run: "make test-postgres"
304+
run: |
305+
gotestsum --junitfile="gotests.xml" --packages="./..." -- \
306+
-covermode=atomic -coverprofile="gotests.coverage" -timeout=30m \
307+
-coverpkg=./...,github.com/coder/coder/codersdk \
308+
-count=2 -race -failfast
309+
env:
310+
DB_FROM: ${{ steps.migrated.outputs.db-from }}
298311

299312
- name: Upload DataDog Trace
300313
if: always() && github.actor != 'dependabot[bot]' && !github.event.pull_request.head.repo.fork

Makefile

-8
Original file line numberDiff line numberDiff line change
@@ -112,14 +112,6 @@ site/src/api/typesGenerated.ts: scripts/apitypings/main.go $(shell find codersdk
112112
test: test-clean
113113
gotestsum -- -v -short ./...
114114

115-
.PHONY: test-postgres
116-
test-postgres: test-clean
117-
DB=ci gotestsum --junitfile="gotests.xml" --packages="./..." -- \
118-
-covermode=atomic -coverprofile="gotests.coverage" -timeout=30m \
119-
-coverpkg=./...,github.com/coder/coder/codersdk \
120-
-count=1 -race -failfast
121-
122-
123115
.PHONY: test-postgres-docker
124116
test-postgres-docker:
125117
docker run \

coderd/database/postgres/postgres.go

+16-3
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313
"github.com/ory/dockertest/v3/docker"
1414
"golang.org/x/xerrors"
1515

16+
"github.com/coder/coder/coderd/database"
1617
"github.com/coder/coder/cryptorand"
1718
)
1819

@@ -39,9 +40,21 @@ func Open() (string, func(), error) {
3940
}
4041

4142
dbName = "ci" + dbName
42-
_, err = db.Exec("CREATE DATABASE " + dbName)
43-
if err != nil {
44-
return "", nil, xerrors.Errorf("create db: %w", err)
43+
if os.Getenv("DB_FROM") == "" {
44+
_, err = db.Exec("CREATE DATABASE " + dbName)
45+
if err != nil {
46+
return "", nil, xerrors.Errorf("create db: %w", err)
47+
}
48+
49+
err = database.MigrateUp(db)
50+
if err != nil {
51+
return "", nil, xerrors.Errorf("migrate db: %w", err)
52+
}
53+
} else {
54+
_, err = db.Exec("CREATE DATABASE " + dbName + " WITH TEMPLATE " + os.Getenv("DB_FROM"))
55+
if err != nil {
56+
return "", nil, xerrors.Errorf("create db with template: %w", err)
57+
}
4558
}
4659

4760
deleteDB := func() {

scripts/migrate-ci/main.go

+36
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package main
2+
3+
import (
4+
"database/sql"
5+
"fmt"
6+
7+
"github.com/coder/coder/coderd/database"
8+
"github.com/coder/coder/cryptorand"
9+
)
10+
11+
func main() {
12+
dbURL := "postgres://postgres:postgres@127.0.0.1:5432/postgres?sslmode=disable"
13+
db, err := sql.Open("postgres", dbURL)
14+
if err != nil {
15+
panic(err)
16+
}
17+
defer db.Close()
18+
19+
dbName, err := cryptorand.StringCharset(cryptorand.Lower, 10)
20+
if err != nil {
21+
panic(err)
22+
}
23+
24+
dbName = "ci" + dbName
25+
_, err = db.Exec("CREATE DATABASE " + dbName)
26+
if err != nil {
27+
panic(err)
28+
}
29+
30+
err = database.MigrateUp(db)
31+
if err != nil {
32+
panic(err)
33+
}
34+
35+
_, _ = fmt.Println(dbName)
36+
}

0 commit comments

Comments
 (0)