|
|
|
@ -36,4 +36,196 @@ describe("git-clone", async () => {
|
|
|
|
|
"Cloning fake-url to ~/fake-url...",
|
|
|
|
|
]);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it("repo_dir should match repo name for https", async () => {
|
|
|
|
|
const url = "https://github.com/coder/coder.git";
|
|
|
|
|
const state = await runTerraformApply(import.meta.dir, {
|
|
|
|
|
agent_id: "foo",
|
|
|
|
|
base_dir: "/tmp",
|
|
|
|
|
url,
|
|
|
|
|
});
|
|
|
|
|
expect(state.outputs.repo_dir.value).toEqual("/tmp/coder");
|
|
|
|
|
expect(state.outputs.folder_name.value).toEqual("coder");
|
|
|
|
|
expect(state.outputs.clone_url.value).toEqual(url);
|
|
|
|
|
expect(state.outputs.web_url.value).toEqual(url);
|
|
|
|
|
expect(state.outputs.branch_name.value).toEqual("");
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it("repo_dir should match repo name for https without .git", async () => {
|
|
|
|
|
const url = "https://github.com/coder/coder";
|
|
|
|
|
const state = await runTerraformApply(import.meta.dir, {
|
|
|
|
|
agent_id: "foo",
|
|
|
|
|
base_dir: "/tmp",
|
|
|
|
|
url,
|
|
|
|
|
});
|
|
|
|
|
expect(state.outputs.repo_dir.value).toEqual("/tmp/coder");
|
|
|
|
|
expect(state.outputs.clone_url.value).toEqual(url);
|
|
|
|
|
expect(state.outputs.web_url.value).toEqual(url);
|
|
|
|
|
expect(state.outputs.branch_name.value).toEqual("");
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it("repo_dir should match repo name for ssh", async () => {
|
|
|
|
|
const url = "git@github.com:coder/coder.git";
|
|
|
|
|
const state = await runTerraformApply(import.meta.dir, {
|
|
|
|
|
agent_id: "foo",
|
|
|
|
|
base_dir: "/tmp",
|
|
|
|
|
url,
|
|
|
|
|
});
|
|
|
|
|
expect(state.outputs.repo_dir.value).toEqual("/tmp/coder");
|
|
|
|
|
expect(state.outputs.git_provider.value).toEqual("");
|
|
|
|
|
expect(state.outputs.clone_url.value).toEqual(url);
|
|
|
|
|
const https_url = "https://github.com/coder/coder.git";
|
|
|
|
|
expect(state.outputs.web_url.value).toEqual(https_url);
|
|
|
|
|
expect(state.outputs.branch_name.value).toEqual("");
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it("branch_name should not include query string", async () => {
|
|
|
|
|
const state = await runTerraformApply(import.meta.dir, {
|
|
|
|
|
agent_id: "foo",
|
|
|
|
|
url: "https://gitlab.com/mike.brew/repo-tests.log/-/tree/feat/branch?ref_type=heads",
|
|
|
|
|
});
|
|
|
|
|
expect(state.outputs.repo_dir.value).toEqual("~/repo-tests.log");
|
|
|
|
|
expect(state.outputs.folder_name.value).toEqual("repo-tests.log");
|
|
|
|
|
const https_url = "https://gitlab.com/mike.brew/repo-tests.log";
|
|
|
|
|
expect(state.outputs.clone_url.value).toEqual(https_url);
|
|
|
|
|
expect(state.outputs.web_url.value).toEqual(https_url);
|
|
|
|
|
expect(state.outputs.branch_name.value).toEqual("feat/branch");
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it("branch_name should not include fragments", async () => {
|
|
|
|
|
const state = await runTerraformApply(import.meta.dir, {
|
|
|
|
|
agent_id: "foo",
|
|
|
|
|
base_dir: "/tmp",
|
|
|
|
|
url: "https://gitlab.com/mike.brew/repo-tests.log/-/tree/feat/branch#name",
|
|
|
|
|
});
|
|
|
|
|
expect(state.outputs.repo_dir.value).toEqual("/tmp/repo-tests.log");
|
|
|
|
|
const https_url = "https://gitlab.com/mike.brew/repo-tests.log";
|
|
|
|
|
expect(state.outputs.clone_url.value).toEqual(https_url);
|
|
|
|
|
expect(state.outputs.web_url.value).toEqual(https_url);
|
|
|
|
|
expect(state.outputs.branch_name.value).toEqual("feat/branch");
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it("gitlab url with branch should match", async () => {
|
|
|
|
|
const state = await runTerraformApply(import.meta.dir, {
|
|
|
|
|
agent_id: "foo",
|
|
|
|
|
base_dir: "/tmp",
|
|
|
|
|
url: "https://gitlab.com/mike.brew/repo-tests.log/-/tree/feat/branch",
|
|
|
|
|
});
|
|
|
|
|
expect(state.outputs.repo_dir.value).toEqual("/tmp/repo-tests.log");
|
|
|
|
|
expect(state.outputs.git_provider.value).toEqual("gitlab");
|
|
|
|
|
const https_url = "https://gitlab.com/mike.brew/repo-tests.log";
|
|
|
|
|
expect(state.outputs.clone_url.value).toEqual(https_url);
|
|
|
|
|
expect(state.outputs.web_url.value).toEqual(https_url);
|
|
|
|
|
expect(state.outputs.branch_name.value).toEqual("feat/branch");
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it("github url with branch should match", async () => {
|
|
|
|
|
const state = await runTerraformApply(import.meta.dir, {
|
|
|
|
|
agent_id: "foo",
|
|
|
|
|
base_dir: "/tmp",
|
|
|
|
|
url: "https://github.com/michaelbrewer/repo-tests.log/tree/feat/branch",
|
|
|
|
|
});
|
|
|
|
|
expect(state.outputs.repo_dir.value).toEqual("/tmp/repo-tests.log");
|
|
|
|
|
expect(state.outputs.git_provider.value).toEqual("github");
|
|
|
|
|
const https_url = "https://github.com/michaelbrewer/repo-tests.log";
|
|
|
|
|
expect(state.outputs.clone_url.value).toEqual(https_url);
|
|
|
|
|
expect(state.outputs.web_url.value).toEqual(https_url);
|
|
|
|
|
expect(state.outputs.branch_name.value).toEqual("feat/branch");
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it("self-host git url with branch should match", async () => {
|
|
|
|
|
const state = await runTerraformApply(import.meta.dir, {
|
|
|
|
|
agent_id: "foo",
|
|
|
|
|
base_dir: "/tmp",
|
|
|
|
|
url: "https://git.example.com/example/project/-/tree/feat/example",
|
|
|
|
|
git_providers: `
|
|
|
|
|
{
|
|
|
|
|
"https://git.example.com/" = {
|
|
|
|
|
provider = "gitlab"
|
|
|
|
|
}
|
|
|
|
|
}`,
|
|
|
|
|
});
|
|
|
|
|
expect(state.outputs.repo_dir.value).toEqual("/tmp/project");
|
|
|
|
|
expect(state.outputs.git_provider.value).toEqual("gitlab");
|
|
|
|
|
const https_url = "https://git.example.com/example/project";
|
|
|
|
|
expect(state.outputs.clone_url.value).toEqual(https_url);
|
|
|
|
|
expect(state.outputs.web_url.value).toEqual(https_url);
|
|
|
|
|
expect(state.outputs.branch_name.value).toEqual("feat/example");
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it("handle unsupported git provider configuration", async () => {
|
|
|
|
|
const t = async () => {
|
|
|
|
|
await runTerraformApply(import.meta.dir, {
|
|
|
|
|
agent_id: "foo",
|
|
|
|
|
url: "foo",
|
|
|
|
|
git_providers: `
|
|
|
|
|
{
|
|
|
|
|
"https://git.example.com/" = {
|
|
|
|
|
provider = "bitbucket"
|
|
|
|
|
}
|
|
|
|
|
}`,
|
|
|
|
|
});
|
|
|
|
|
};
|
|
|
|
|
expect(t).toThrow('Allowed values for provider are "github" or "gitlab".');
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it("handle unknown git provider url", async () => {
|
|
|
|
|
const url = "https://git.unknown.com/coder/coder";
|
|
|
|
|
const state = await runTerraformApply(import.meta.dir, {
|
|
|
|
|
agent_id: "foo",
|
|
|
|
|
base_dir: "/tmp",
|
|
|
|
|
url,
|
|
|
|
|
});
|
|
|
|
|
expect(state.outputs.repo_dir.value).toEqual("/tmp/coder");
|
|
|
|
|
expect(state.outputs.clone_url.value).toEqual(url);
|
|
|
|
|
expect(state.outputs.web_url.value).toEqual(url);
|
|
|
|
|
expect(state.outputs.branch_name.value).toEqual("");
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it("runs with github clone with switch to feat/branch", async () => {
|
|
|
|
|
const state = await runTerraformApply(import.meta.dir, {
|
|
|
|
|
agent_id: "foo",
|
|
|
|
|
url: "https://github.com/michaelbrewer/repo-tests.log/tree/feat/branch",
|
|
|
|
|
});
|
|
|
|
|
const output = await executeScriptInContainer(state, "alpine/git");
|
|
|
|
|
expect(output.exitCode).toBe(0);
|
|
|
|
|
expect(output.stdout).toEqual([
|
|
|
|
|
"Creating directory ~/repo-tests.log...",
|
|
|
|
|
"Cloning https://github.com/michaelbrewer/repo-tests.log to ~/repo-tests.log on branch feat/branch...",
|
|
|
|
|
]);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it("runs with gitlab clone with switch to feat/branch", async () => {
|
|
|
|
|
const state = await runTerraformApply(import.meta.dir, {
|
|
|
|
|
agent_id: "foo",
|
|
|
|
|
url: "https://gitlab.com/mike.brew/repo-tests.log/-/tree/feat/branch",
|
|
|
|
|
});
|
|
|
|
|
const output = await executeScriptInContainer(state, "alpine/git");
|
|
|
|
|
expect(output.exitCode).toBe(0);
|
|
|
|
|
expect(output.stdout).toEqual([
|
|
|
|
|
"Creating directory ~/repo-tests.log...",
|
|
|
|
|
"Cloning https://gitlab.com/mike.brew/repo-tests.log to ~/repo-tests.log on branch feat/branch...",
|
|
|
|
|
]);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it("runs with github clone with branch_name set to feat/branch", async () => {
|
|
|
|
|
const url = "https://github.com/michaelbrewer/repo-tests.log";
|
|
|
|
|
const branch_name = "feat/branch";
|
|
|
|
|
const state = await runTerraformApply(import.meta.dir, {
|
|
|
|
|
agent_id: "foo",
|
|
|
|
|
url,
|
|
|
|
|
branch_name,
|
|
|
|
|
});
|
|
|
|
|
expect(state.outputs.repo_dir.value).toEqual("~/repo-tests.log");
|
|
|
|
|
expect(state.outputs.clone_url.value).toEqual(url);
|
|
|
|
|
expect(state.outputs.web_url.value).toEqual(url);
|
|
|
|
|
expect(state.outputs.branch_name.value).toEqual(branch_name);
|
|
|
|
|
|
|
|
|
|
const output = await executeScriptInContainer(state, "alpine/git");
|
|
|
|
|
expect(output.exitCode).toBe(0);
|
|
|
|
|
expect(output.stdout).toEqual([
|
|
|
|
|
"Creating directory ~/repo-tests.log...",
|
|
|
|
|
"Cloning https://github.com/michaelbrewer/repo-tests.log to ~/repo-tests.log on branch feat/branch...",
|
|
|
|
|
]);
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|