Skip to content

Commit e064f76

Browse files
committed
fix(generix-package): add missing fallback for label #823
1 parent d9cf038 commit e064f76

File tree

2 files changed

+49
-2
lines changed

2 files changed

+49
-2
lines changed

lib/publish.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -108,8 +108,9 @@ export default async (pluginConfig, context) => {
108108
let response;
109109

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

133-
assetsList.push({ label, alt: "release", url, type: "package", filepath });
134+
assetsList.push({ label: finalLabel, alt: "release", url, type: "package", filepath });
134135

135136
logger.log("Uploaded file: %s (%s)", url, response.file.url);
136137
} else {

test/publish.test.js

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,52 @@ test.serial("Publish a release with generics", async (t) => {
176176
t.true(gitlab.isDone());
177177
});
178178

179+
test.serial("Publish a release with generics (without label - issue #823)", async (t) => {
180+
const cwd = "test/fixtures/files";
181+
const owner = "test_user";
182+
const repo = "test_repo";
183+
const env = { GITLAB_TOKEN: "gitlab_token" };
184+
const nextRelease = { gitHead: "123", gitTag: "v1.0.0", notes: "Test release note body", version: "1.0.0" };
185+
const options = { repositoryUrl: `https://gitlab.com/${owner}/${repo}.git` };
186+
const encodedProjectPath = encodeURIComponent(`${owner}/${repo}`);
187+
const encodedGitTag = encodeURIComponent(nextRelease.gitTag);
188+
const encodedVersion = encodeURIComponent(nextRelease.version);
189+
const uploaded = { file: { url: "/uploads/file.css" } };
190+
const generic = { path: "file.css", target: "generic_package", status: "hidden" };
191+
const assets = [generic];
192+
const encodedLabel = encodeURIComponent(generic.path);
193+
const expectedUrl = `https://gitlab.com/api/v4/projects/${encodedProjectPath}/packages/generic/release/${encodedVersion}/${encodedLabel}`;
194+
const gitlab = authenticate(env)
195+
.post(`/projects/${encodedProjectPath}/releases`, {
196+
tag_name: nextRelease.gitTag,
197+
description: nextRelease.notes,
198+
assets: {
199+
links: [
200+
{
201+
name: "file.css",
202+
url: expectedUrl,
203+
link_type: "package",
204+
},
205+
],
206+
},
207+
})
208+
.reply(200);
209+
const gitlabUpload = authenticate(env)
210+
.put(
211+
`/projects/${encodedProjectPath}/packages/generic/release/${encodedVersion}/${encodedLabel}?status=${generic.status}&select=package_file`,
212+
/\.test\s\{\}/gm
213+
)
214+
.reply(200, uploaded);
215+
216+
const result = await publish({ assets }, { env, cwd, options, nextRelease, logger: t.context.logger });
217+
218+
t.is(result.url, `https://gitlab.com/${owner}/${repo}/-/releases/${encodedGitTag}`);
219+
t.deepEqual(t.context.log.args[0], ["Uploaded file: %s (%s)", expectedUrl, uploaded.file.url]);
220+
t.deepEqual(t.context.log.args[1], ["Published GitLab release: %s", nextRelease.gitTag]);
221+
t.true(gitlabUpload.isDone());
222+
t.true(gitlab.isDone());
223+
});
224+
179225
test.serial("Publish a release with generics and external storage provider (http)", async (t) => {
180226
const cwd = "test/fixtures/files";
181227
const owner = "test_user";

0 commit comments

Comments
 (0)