72 lines
3.1 KiB
Go
72 lines
3.1 KiB
Go
package main
|
|
|
|
import (
|
|
"bytes"
|
|
"context"
|
|
"errors"
|
|
"os"
|
|
"os/exec"
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"gitea.maximumdirect.net/eric/ReleaseKit/cmd/releasekit/internal/cli"
|
|
)
|
|
|
|
func TestCandidateCheckUsesCommittedDeclarationSymlink(t *testing.T) {
|
|
repository := newCLIRepository(t)
|
|
if err := os.Rename(filepath.Join(repository, "go.mod"), filepath.Join(repository, "module.txt")); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := os.Symlink("module.txt", filepath.Join(repository, "go.mod")); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
writeDeliveryProfile(t, repository, cli.Settings{Product: "Example Product"})
|
|
cliGitRun(t, repository, "add", ".")
|
|
cliGitRun(t, repository, "commit", "-m", "Use committed declaration symlink")
|
|
var stdout, stderr bytes.Buffer
|
|
if status := run(context.Background(), []string{"check", "--repo", repository, "v1.2.3"}, &stdout, &stderr); status != 0 {
|
|
t.Fatalf("linked declaration check status=%d stderr=%s", status, stderr.String())
|
|
}
|
|
}
|
|
|
|
func TestPageOnlyDeliveryUsesCommittedModuleInSparseCheckout(t *testing.T) {
|
|
repository := newCLIRepository(t)
|
|
const module = "apps/widget"
|
|
writeRepositoryFile(t, repository, module+"/go.mod", "module example.com/widget\n\ngo 1.26.0\n")
|
|
writeRepositoryFile(t, repository, module+"/docs/releases/v1.2.3.md", "# Example Product v1.2.3\n\nNested release note.\n")
|
|
cliGitRun(t, repository, "add", ".")
|
|
cliGitRun(t, repository, "commit", "-m", "Add sparse release module")
|
|
state := &deliveryServerState{data: deliveryServerData{tag: module + "/v1.2.3"}}
|
|
server := newDeliveryServer(t, state)
|
|
defer server.Close()
|
|
writeDeliveryProfile(t, repository, cli.Settings{Product: "Example Product", ModuleDir: module,
|
|
Delivery: &cli.DeliverySettings{BaseURL: server.URL, Owner: "owner", Repository: "example"},
|
|
})
|
|
state.update(func(state *deliveryServerData) { state.commit = cliGitOutput(t, repository, "rev-parse", "HEAD") })
|
|
cliGitRun(t, repository, "tag", state.snapshot().tag)
|
|
cliGitRun(t, repository, "checkout", "--detach", state.snapshot().tag)
|
|
cliGitRun(t, repository, "sparse-checkout", "set", "--cone", "docs")
|
|
if _, err := os.Stat(filepath.Join(repository, filepath.FromSlash(module))); !errors.Is(err, os.ErrNotExist) {
|
|
t.Fatalf("module fixture is materialized: %v", err)
|
|
}
|
|
t.Setenv("RELEASEKIT_GITEA_TOKEN", "fixture-token")
|
|
gitOnly := t.TempDir()
|
|
gitPath, err := exec.LookPath("git")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := os.Symlink(gitPath, filepath.Join(gitOnly, "git")); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
t.Setenv("PATH", gitOnly)
|
|
for _, args := range [][]string{
|
|
{"deliver", "--repo", repository, "v1.2.3"},
|
|
{"ci-deliver", "--repo", repository, "--prepared", "--expected-module", module, "--commit", state.snapshot().commit, state.snapshot().tag},
|
|
} {
|
|
var stdout, stderr bytes.Buffer
|
|
if status := run(context.Background(), args, &stdout, &stderr); status != 0 || state.snapshot().releaseCreates != 1 || state.snapshot().assetUploads != 0 {
|
|
t.Fatalf("%s sparse delivery status=%d creates=%d uploads=%d stderr=%s", args[0], status, state.snapshot().releaseCreates, state.snapshot().assetUploads, stderr.String())
|
|
}
|
|
}
|
|
}
|