Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions lib/publish.js
Original file line number Diff line number Diff line change
Expand Up @@ -108,8 +108,9 @@ export default async (pluginConfig, context) => {
let response;

if (target === "generic_package") {
const finalLabel = label ?? pathlib.basename(file);
// Upload generic packages
const encodedLabel = encodeURIComponent(label);
const encodedLabel = encodeURIComponent(finalLabel);
// https://docs.gitlab.com/ee/user/packages/generic_packages/#publish-a-package-file
uploadEndpoint = urlJoin(
projectApiUrl,
Expand All @@ -130,7 +131,7 @@ export default async (pluginConfig, context) => {
// https://docs.gitlab.com/ee/user/packages/generic_packages/#download-package-file
const url = urlJoin(projectApiUrl, `packages/generic/release/${encodedVersion}/${encodedLabel}`);

assetsList.push({ label, alt: "release", url, type: "package", filepath });
assetsList.push({ label: finalLabel, alt: "release", url, type: "package", filepath });

logger.log("Uploaded file: %s (%s)", url, response.file.url);
} else {
Expand Down
46 changes: 46 additions & 0 deletions test/publish.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -176,6 +176,52 @@ test.serial("Publish a release with generics", async (t) => {
t.true(gitlab.isDone());
});

test.serial("Publish a release with generics (without label - issue #823)", async (t) => {
const cwd = "test/fixtures/files";
const owner = "test_user";
const repo = "test_repo";
const env = { GITLAB_TOKEN: "gitlab_token" };
const nextRelease = { gitHead: "123", gitTag: "v1.0.0", notes: "Test release note body", version: "1.0.0" };
const options = { repositoryUrl: `https://gitlab.com/${owner}/${repo}.git` };
const encodedProjectPath = encodeURIComponent(`${owner}/${repo}`);
const encodedGitTag = encodeURIComponent(nextRelease.gitTag);
const encodedVersion = encodeURIComponent(nextRelease.version);
const uploaded = { file: { url: "/uploads/file.css" } };
const generic = { path: "file.css", target: "generic_package", status: "hidden" };
const assets = [generic];
const encodedLabel = encodeURIComponent(generic.path);
const expectedUrl = `https://gitlab.com/api/v4/projects/${encodedProjectPath}/packages/generic/release/${encodedVersion}/${encodedLabel}`;
const gitlab = authenticate(env)
.post(`/projects/${encodedProjectPath}/releases`, {
tag_name: nextRelease.gitTag,
description: nextRelease.notes,
assets: {
links: [
{
name: "file.css",
url: expectedUrl,
link_type: "package",
},
],
},
})
.reply(200);
const gitlabUpload = authenticate(env)
.put(
`/projects/${encodedProjectPath}/packages/generic/release/${encodedVersion}/${encodedLabel}?status=${generic.status}&select=package_file`,
/\.test\s\{\}/gm
)
.reply(200, uploaded);

const result = await publish({ assets }, { env, cwd, options, nextRelease, logger: t.context.logger });

t.is(result.url, `https://gitlab.com/${owner}/${repo}/-/releases/${encodedGitTag}`);
t.deepEqual(t.context.log.args[0], ["Uploaded file: %s (%s)", expectedUrl, uploaded.file.url]);
t.deepEqual(t.context.log.args[1], ["Published GitLab release: %s", nextRelease.gitTag]);
t.true(gitlabUpload.isDone());
t.true(gitlab.isDone());
});

test.serial("Publish a release with generics and external storage provider (http)", async (t) => {
const cwd = "test/fixtures/files";
const owner = "test_user";
Expand Down
Loading