mirror of
https://github.com/element-hq/dendrite.git
synced 2025-09-13 12:52:24 +03:00
Add temporary repository flag (#3453)
As long as we don't have any releases in this organization, upgrade tests are going to fail. This adds a `repository` flag which allows overwriting the repository to pull old version archives from.
This commit is contained in:
parent
72039f651e
commit
23e097c3f0
2 changed files with 15 additions and 14 deletions
8
.github/workflows/dendrite.yml
vendored
8
.github/workflows/dendrite.yml
vendored
|
@ -294,9 +294,9 @@ jobs:
|
||||||
- name: Build upgrade-tests
|
- name: Build upgrade-tests
|
||||||
run: go build ./cmd/dendrite-upgrade-tests
|
run: go build ./cmd/dendrite-upgrade-tests
|
||||||
- name: Test upgrade (PostgreSQL)
|
- name: Test upgrade (PostgreSQL)
|
||||||
run: ./dendrite-upgrade-tests --head .
|
run: ./dendrite-upgrade-tests -repository=matrix-org/dendrite --head .
|
||||||
- name: Test upgrade (SQLite)
|
- name: Test upgrade (SQLite)
|
||||||
run: ./dendrite-upgrade-tests --sqlite --head .
|
run: ./dendrite-upgrade-tests --sqlite -repository=matrix-org/dendrite --head .
|
||||||
|
|
||||||
# run database upgrade tests, skipping over one version
|
# run database upgrade tests, skipping over one version
|
||||||
upgrade_test_direct:
|
upgrade_test_direct:
|
||||||
|
@ -324,9 +324,9 @@ jobs:
|
||||||
- name: Build upgrade-tests
|
- name: Build upgrade-tests
|
||||||
run: go build ./cmd/dendrite-upgrade-tests
|
run: go build ./cmd/dendrite-upgrade-tests
|
||||||
- name: Test upgrade (PostgreSQL)
|
- name: Test upgrade (PostgreSQL)
|
||||||
run: ./dendrite-upgrade-tests -direct -from HEAD-2 --head .
|
run: ./dendrite-upgrade-tests -direct -from HEAD-2 -repository=matrix-org/dendrite --head .
|
||||||
- name: Test upgrade (SQLite)
|
- name: Test upgrade (SQLite)
|
||||||
run: ./dendrite-upgrade-tests -direct -from HEAD-2 --head .
|
run: ./dendrite-upgrade-tests --sqlite -direct -from HEAD-2 -repository=matrix-org/dendrite --head .
|
||||||
|
|
||||||
# run Sytest in different variations
|
# run Sytest in different variations
|
||||||
sytest:
|
sytest:
|
||||||
|
|
|
@ -39,6 +39,7 @@ var (
|
||||||
flagDockerHost = flag.String("docker-host", "localhost", "The hostname of the docker client. 'localhost' if running locally, 'host.docker.internal' if running in Docker.")
|
flagDockerHost = flag.String("docker-host", "localhost", "The hostname of the docker client. 'localhost' if running locally, 'host.docker.internal' if running in Docker.")
|
||||||
flagDirect = flag.Bool("direct", false, "If a direct upgrade from the defined FROM version to TO should be done")
|
flagDirect = flag.Bool("direct", false, "If a direct upgrade from the defined FROM version to TO should be done")
|
||||||
flagSqlite = flag.Bool("sqlite", false, "Test SQLite instead of PostgreSQL")
|
flagSqlite = flag.Bool("sqlite", false, "Test SQLite instead of PostgreSQL")
|
||||||
|
flagRepository = flag.String("repository", "element-hq/dendrite", "The base repository to use when running upgrade tests.")
|
||||||
alphaNumerics = regexp.MustCompile("[^a-zA-Z0-9]+")
|
alphaNumerics = regexp.MustCompile("[^a-zA-Z0-9]+")
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -187,7 +188,7 @@ func downloadArchive(cli *http.Client, tmpDir, archiveURL string, dockerfile []b
|
||||||
}
|
}
|
||||||
|
|
||||||
// buildDendrite builds Dendrite on the branchOrTagName given. Returns the image ID or an error
|
// buildDendrite builds Dendrite on the branchOrTagName given. Returns the image ID or an error
|
||||||
func buildDendrite(httpClient *http.Client, dockerClient *client.Client, tmpDir string, branchOrTagName, binary string) (string, error) {
|
func buildDendrite(httpClient *http.Client, dockerClient *client.Client, tmpDir string, branchOrTagName, binary, repository string) (string, error) {
|
||||||
var tarball *bytes.Buffer
|
var tarball *bytes.Buffer
|
||||||
var err error
|
var err error
|
||||||
// If a custom HEAD location is given, use that, else pull from github. Mostly useful for CI
|
// If a custom HEAD location is given, use that, else pull from github. Mostly useful for CI
|
||||||
|
@ -210,7 +211,7 @@ func buildDendrite(httpClient *http.Client, dockerClient *client.Client, tmpDir
|
||||||
log.Printf("%s: Downloading version %s to %s\n", branchOrTagName, branchOrTagName, tmpDir)
|
log.Printf("%s: Downloading version %s to %s\n", branchOrTagName, branchOrTagName, tmpDir)
|
||||||
// pull an archive, this contains a top-level directory which screws with the build context
|
// pull an archive, this contains a top-level directory which screws with the build context
|
||||||
// which we need to fix up post download
|
// which we need to fix up post download
|
||||||
u := fmt.Sprintf("https://github.com/element-hq/dendrite/archive/%s.tar.gz", branchOrTagName)
|
u := fmt.Sprintf("https://github.com/%s/archive/%s.tar.gz", repository, branchOrTagName)
|
||||||
tarball, err = downloadArchive(httpClient, tmpDir, u, dockerfile())
|
tarball, err = downloadArchive(httpClient, tmpDir, u, dockerfile())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", fmt.Errorf("failed to download archive %s: %w", u, err)
|
return "", fmt.Errorf("failed to download archive %s: %w", u, err)
|
||||||
|
@ -254,8 +255,8 @@ func buildDendrite(httpClient *http.Client, dockerClient *client.Client, tmpDir
|
||||||
return imageID, nil
|
return imageID, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getAndSortVersionsFromGithub(httpClient *http.Client) (semVers []*semver.Version, err error) {
|
func getAndSortVersionsFromGithub(httpClient *http.Client, repository string) (semVers []*semver.Version, err error) {
|
||||||
u := "https://api.github.com/repos/element-hq/dendrite/tags"
|
u := fmt.Sprintf("https://api.github.com/repos/%s/tags", repository)
|
||||||
|
|
||||||
var res *http.Response
|
var res *http.Response
|
||||||
for i := 0; i < 3; i++ {
|
for i := 0; i < 3; i++ {
|
||||||
|
@ -290,8 +291,8 @@ func getAndSortVersionsFromGithub(httpClient *http.Client) (semVers []*semver.Ve
|
||||||
return semVers, nil
|
return semVers, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func calculateVersions(cli *http.Client, from, to string, direct bool) []*semver.Version {
|
func calculateVersions(cli *http.Client, from, to, repository string, direct bool) []*semver.Version {
|
||||||
semvers, err := getAndSortVersionsFromGithub(cli)
|
semvers, err := getAndSortVersionsFromGithub(cli, repository)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("failed to collect semvers from github: %s", err)
|
log.Fatalf("failed to collect semvers from github: %s", err)
|
||||||
}
|
}
|
||||||
|
@ -348,7 +349,7 @@ func calculateVersions(cli *http.Client, from, to string, direct bool) []*semver
|
||||||
return semvers
|
return semvers
|
||||||
}
|
}
|
||||||
|
|
||||||
func buildDendriteImages(httpClient *http.Client, dockerClient *client.Client, baseTempDir string, concurrency int, versions []*semver.Version) map[string]string {
|
func buildDendriteImages(httpClient *http.Client, dockerClient *client.Client, baseTempDir, repository string, concurrency int, versions []*semver.Version) map[string]string {
|
||||||
// concurrently build all versions, this can be done in any order. The mutex protects the map
|
// concurrently build all versions, this can be done in any order. The mutex protects the map
|
||||||
branchToImageID := make(map[string]string)
|
branchToImageID := make(map[string]string)
|
||||||
var mu sync.Mutex
|
var mu sync.Mutex
|
||||||
|
@ -368,7 +369,7 @@ func buildDendriteImages(httpClient *http.Client, dockerClient *client.Client, b
|
||||||
branchName, binary := versionToBranchAndBinary(version)
|
branchName, binary := versionToBranchAndBinary(version)
|
||||||
log.Printf("Building version %s with binary %s", branchName, binary)
|
log.Printf("Building version %s with binary %s", branchName, binary)
|
||||||
tmpDir := baseTempDir + alphaNumerics.ReplaceAllString(branchName, "")
|
tmpDir := baseTempDir + alphaNumerics.ReplaceAllString(branchName, "")
|
||||||
imgID, err := buildDendrite(httpClient, dockerClient, tmpDir, branchName, binary)
|
imgID, err := buildDendrite(httpClient, dockerClient, tmpDir, branchName, binary, repository)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("%s: failed to build dendrite image: %s", version, err)
|
log.Fatalf("%s: failed to build dendrite image: %s", version, err)
|
||||||
}
|
}
|
||||||
|
@ -583,10 +584,10 @@ func main() {
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
cleanup(dockerClient)
|
cleanup(dockerClient)
|
||||||
versions := calculateVersions(httpClient, *flagFrom, *flagTo, *flagDirect)
|
versions := calculateVersions(httpClient, *flagFrom, *flagTo, *flagRepository, *flagDirect)
|
||||||
log.Printf("Testing dendrite versions: %v\n", versions)
|
log.Printf("Testing dendrite versions: %v\n", versions)
|
||||||
|
|
||||||
branchToImageID := buildDendriteImages(httpClient, dockerClient, *flagTempDir, *flagBuildConcurrency, versions)
|
branchToImageID := buildDendriteImages(httpClient, dockerClient, *flagTempDir, *flagRepository, *flagBuildConcurrency, versions)
|
||||||
|
|
||||||
// make a shared postgres volume
|
// make a shared postgres volume
|
||||||
volume, err := dockerClient.VolumeCreate(context.Background(), volume.CreateOptions{
|
volume, err := dockerClient.VolumeCreate(context.Background(), volume.CreateOptions{
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue