ci: re-enable test migrations in release workflow (#13307)

This commit is contained in:
Cian Johnston
2024-05-20 10:35:06 +01:00
committed by GitHub
parent a63d427efd
commit 45b45f1107
2 changed files with 20 additions and 7 deletions

View File

@ -178,9 +178,9 @@ jobs:
env: env:
EV_SIGNING_CERT: ${{ secrets.EV_SIGNING_CERT }} EV_SIGNING_CERT: ${{ secrets.EV_SIGNING_CERT }}
# - name: Test migrations from current ref to main - name: Test migrations from current ref to main
# run: | run: |
# make test-migrations make test-migrations
# Setup GCloud for signing Windows binaries. # Setup GCloud for signing Windows binaries.
- name: Authenticate to Google Cloud - name: Authenticate to Google Cloud

View File

@ -6,6 +6,7 @@ import (
"database/sql" "database/sql"
"flag" "flag"
"fmt" "fmt"
"io"
"io/fs" "io/fs"
"os" "os"
"os/exec" "os/exec"
@ -80,27 +81,39 @@ func main() {
_, _ = fmt.Fprintf(os.Stderr, "Init database at version %q\n", migrateFromVersion) _, _ = fmt.Fprintf(os.Stderr, "Init database at version %q\n", migrateFromVersion)
if err := migrations.UpWithFS(conn, migrateFromFS); err != nil { if err := migrations.UpWithFS(conn, migrateFromFS); err != nil {
panic(err) friendlyError(os.Stderr, err, migrateFromVersion, migrateToVersion)
os.Exit(1)
} }
_, _ = fmt.Fprintf(os.Stderr, "Migrate to version %q\n", migrateToVersion) _, _ = fmt.Fprintf(os.Stderr, "Migrate to version %q\n", migrateToVersion)
if err := migrations.UpWithFS(conn, migrateToFS); err != nil { if err := migrations.UpWithFS(conn, migrateToFS); err != nil {
panic(err) friendlyError(os.Stderr, err, migrateFromVersion, migrateToVersion)
os.Exit(1)
} }
_, _ = fmt.Fprintf(os.Stderr, "Dump schema at version %q\n", migrateToVersion) _, _ = fmt.Fprintf(os.Stderr, "Dump schema at version %q\n", migrateToVersion)
dumpBytesAfter, err := dbtestutil.PGDumpSchemaOnly(postgresURL) dumpBytesAfter, err := dbtestutil.PGDumpSchemaOnly(postgresURL)
if err != nil { if err != nil {
panic(err) friendlyError(os.Stderr, err, migrateFromVersion, migrateToVersion)
os.Exit(1)
} }
if diff := cmp.Diff(string(dumpBytesAfter), string(stripGenPreamble(expectedSchemaAfter))); diff != "" { if diff := cmp.Diff(string(dumpBytesAfter), string(stripGenPreamble(expectedSchemaAfter))); diff != "" {
_, _ = fmt.Fprintf(os.Stderr, "Schema differs from expected after migration: %s\n", diff) friendlyError(os.Stderr, xerrors.Errorf("Schema differs from expected after migration: %s", diff), migrateFromVersion, migrateToVersion)
os.Exit(1) os.Exit(1)
} }
_, _ = fmt.Fprintf(os.Stderr, "OK\n") _, _ = fmt.Fprintf(os.Stderr, "OK\n")
} }
func friendlyError(w io.Writer, err error, v1, v2 string) {
_, _ = fmt.Fprintf(w, "Migrating from version %q to %q failed:\n", v1, v2)
_, _ = fmt.Fprintf(w, "\t%s\n", err.Error())
_, _ = fmt.Fprintf(w, "Check the following:\n")
_, _ = fmt.Fprintf(w, " - All migrations from version %q must exist in version %q with the same migration numbers.\n", v2, v1)
_, _ = fmt.Fprintf(w, " - Each migration must have the same effect.\n")
_, _ = fmt.Fprintf(w, " - There must be no gaps or duplicates in the migration numbers.\n")
}
func makeMigrateFS(version string) (fs.FS, error) { func makeMigrateFS(version string) (fs.FS, error) {
// Export the migrations from the requested version to a zip archive // Export the migrations from the requested version to a zip archive
out, err := exec.Command("git", "archive", "--format=zip", version, "coderd/database/migrations").CombinedOutput() out, err := exec.Command("git", "archive", "--format=zip", version, "coderd/database/migrations").CombinedOutput()