mirror of
https://github.com/coder/coder.git
synced 2025-07-15 22:20:27 +00:00
ci: re-enable test migrations in release workflow (#13307)
This commit is contained in:
6
.github/workflows/release.yaml
vendored
6
.github/workflows/release.yaml
vendored
@ -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
|
||||||
|
@ -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()
|
||||||
|
Reference in New Issue
Block a user