Skip to content

Commit 317d3e9

Browse files
authored
Merge pull request #503 from JonasSchubert/fix/generic-packages-use-version-instead-of-git-tag
fix(generic-packages): use version for publish URL for consistency with npm
2 parents 1fee8ad + e346b22 commit 317d3e9

File tree

2 files changed

+35
-21
lines changed

2 files changed

+35
-21
lines changed

lib/publish.js

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,15 @@ export default async (pluginConfig, context) => {
1818
const {
1919
cwd,
2020
options: { repositoryUrl },
21-
nextRelease: { gitTag, gitHead, notes },
21+
nextRelease: { gitTag, gitHead, notes, version },
2222
logger,
2323
} = context;
2424
const { gitlabToken, gitlabUrl, gitlabApiUrl, assets, milestones, proxy } = resolveConfig(pluginConfig, context);
2525
const assetsList = [];
2626
const repoId = getRepoId(context, gitlabUrl, repositoryUrl);
2727
const encodedRepoId = encodeURIComponent(repoId);
2828
const encodedGitTag = encodeURIComponent(gitTag);
29+
const encodedVersion = encodeURIComponent(version);
2930
const apiOptions = { headers: { "PRIVATE-TOKEN": gitlabToken } };
3031

3132
debug("repoId: %o", repoId);
@@ -88,9 +89,10 @@ export default async (pluginConfig, context) => {
8889
if (target === "generic_package") {
8990
// Upload generic packages
9091
const encodedLabel = encodeURIComponent(label);
92+
// https://docs.gitlab.com/ee/user/packages/generic_packages/#publish-a-package-file
9193
uploadEndpoint = urlJoin(
9294
gitlabApiUrl,
93-
`/projects/${encodedRepoId}/packages/generic/release/${encodedGitTag}/${encodedLabel}?${
95+
`/projects/${encodedRepoId}/packages/generic/release/${encodedVersion}/${encodedLabel}?${
9496
status ? `status=${status}&` : ""
9597
}select=package_file`
9698
);
@@ -104,11 +106,15 @@ export default async (pluginConfig, context) => {
104106
throw error;
105107
}
106108

107-
const { url } = response.file;
109+
// https://docs.gitlab.com/ee/user/packages/generic_packages/#download-package-file
110+
const url = urlJoin(
111+
gitlabApiUrl,
112+
`/projects/${encodedRepoId}/packages/generic/release/${encodedVersion}/${encodedLabel}`
113+
);
108114

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

111-
logger.log("Uploaded file: %s", url);
117+
logger.log("Uploaded file: %s (%s)", url, response.file.url);
112118
} else {
113119
// Handle normal assets
114120
uploadEndpoint = urlJoin(gitlabApiUrl, `/projects/${encodedRepoId}/uploads`);

test/publish.test.js

Lines changed: 25 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -83,19 +83,21 @@ test.serial("Publish a release with assets", async (t) => {
8383
t.true(gitlab.isDone());
8484
});
8585

86-
test.serial("Publish a release with generics and relative URL", async (t) => {
86+
test.serial("Publish a release with generics", async (t) => {
8787
const cwd = "test/fixtures/files";
8888
const owner = "test_user";
8989
const repo = "test_repo";
9090
const env = { GITLAB_TOKEN: "gitlab_token" };
91-
const nextRelease = { gitHead: "123", gitTag: "v1.0.0", notes: "Test release note body" };
91+
const nextRelease = { gitHead: "123", gitTag: "v1.0.0", notes: "Test release note body", version: "1.0.0" };
9292
const options = { repositoryUrl: `https://gitlab.com/${owner}/${repo}.git` };
9393
const encodedRepoId = encodeURIComponent(`${owner}/${repo}`);
9494
const encodedGitTag = encodeURIComponent(nextRelease.gitTag);
95+
const encodedVersion = encodeURIComponent(nextRelease.version);
9596
const uploaded = { file: { url: "/uploads/file.css" } };
9697
const generic = { path: "file.css", label: "Style package", target: "generic_package", status: "hidden" };
9798
const assets = [generic];
9899
const encodedLabel = encodeURIComponent(generic.label);
100+
const expectedUrl = `https://gitlab.com/api/v4/projects/${encodedRepoId}/packages/generic/release/${encodedVersion}/${encodedLabel}`;
99101
const gitlab = authenticate(env)
100102
.post(`/projects/${encodedRepoId}/releases`, {
101103
tag_name: nextRelease.gitTag,
@@ -104,7 +106,7 @@ test.serial("Publish a release with generics and relative URL", async (t) => {
104106
links: [
105107
{
106108
name: "Style package",
107-
url: `https://gitlab.com/${owner}/${repo}${uploaded.file.url}`,
109+
url: expectedUrl,
108110
link_type: "package",
109111
},
110112
],
@@ -113,15 +115,15 @@ test.serial("Publish a release with generics and relative URL", async (t) => {
113115
.reply(200);
114116
const gitlabUpload = authenticate(env)
115117
.put(
116-
`/projects/${encodedRepoId}/packages/generic/release/${encodedGitTag}/${encodedLabel}?status=${generic.status}&select=package_file`,
118+
`/projects/${encodedRepoId}/packages/generic/release/${encodedVersion}/${encodedLabel}?status=${generic.status}&select=package_file`,
117119
/\.test\s\{\}/gm
118120
)
119121
.reply(200, uploaded);
120122

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

123125
t.is(result.url, `https://gitlab.com/${owner}/${repo}/-/releases/${encodedGitTag}`);
124-
t.deepEqual(t.context.log.args[0], ["Uploaded file: %s", uploaded.file.url]);
126+
t.deepEqual(t.context.log.args[0], ["Uploaded file: %s (%s)", expectedUrl, uploaded.file.url]);
125127
t.deepEqual(t.context.log.args[1], ["Published GitLab release: %s", nextRelease.gitTag]);
126128
t.true(gitlabUpload.isDone());
127129
t.true(gitlab.isDone());
@@ -132,14 +134,16 @@ test.serial("Publish a release with generics and external storage provider (http
132134
const owner = "test_user";
133135
const repo = "test_repo";
134136
const env = { GITLAB_TOKEN: "gitlab_token" };
135-
const nextRelease = { gitHead: "123", gitTag: "v1.0.0", notes: "Test release note body" };
137+
const nextRelease = { gitHead: "123", gitTag: "v1.0.0", notes: "Test release note body", version: "1.0.0" };
136138
const options = { repositoryUrl: `https://gitlab.com/${owner}/${repo}.git` };
137139
const encodedRepoId = encodeURIComponent(`${owner}/${repo}`);
138140
const encodedGitTag = encodeURIComponent(nextRelease.gitTag);
141+
const encodedVersion = encodeURIComponent(nextRelease.version);
139142
const uploaded = { file: { url: "http://aws.example.com/bucket/gitlab/file.css" } };
140143
const generic = { path: "file.css", label: "Style package", target: "generic_package", status: "hidden" };
141144
const assets = [generic];
142145
const encodedLabel = encodeURIComponent(generic.label);
146+
const expectedUrl = `https://gitlab.com/api/v4/projects/${encodedRepoId}/packages/generic/release/${encodedVersion}/${encodedLabel}`;
143147
const gitlab = authenticate(env)
144148
.post(`/projects/${encodedRepoId}/releases`, {
145149
tag_name: nextRelease.gitTag,
@@ -148,7 +152,7 @@ test.serial("Publish a release with generics and external storage provider (http
148152
links: [
149153
{
150154
name: "Style package",
151-
url: uploaded.file.url,
155+
url: expectedUrl,
152156
link_type: "package",
153157
},
154158
],
@@ -157,15 +161,15 @@ test.serial("Publish a release with generics and external storage provider (http
157161
.reply(200);
158162
const gitlabUpload = authenticate(env)
159163
.put(
160-
`/projects/${encodedRepoId}/packages/generic/release/${encodedGitTag}/${encodedLabel}?status=${generic.status}&select=package_file`,
164+
`/projects/${encodedRepoId}/packages/generic/release/${encodedVersion}/${encodedLabel}?status=${generic.status}&select=package_file`,
161165
/\.test\s\{\}/gm
162166
)
163167
.reply(200, uploaded);
164168

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

167171
t.is(result.url, `https://gitlab.com/${owner}/${repo}/-/releases/${encodedGitTag}`);
168-
t.deepEqual(t.context.log.args[0], ["Uploaded file: %s", uploaded.file.url]);
172+
t.deepEqual(t.context.log.args[0], ["Uploaded file: %s (%s)", expectedUrl, uploaded.file.url]);
169173
t.deepEqual(t.context.log.args[1], ["Published GitLab release: %s", nextRelease.gitTag]);
170174
t.true(gitlabUpload.isDone());
171175
t.true(gitlab.isDone());
@@ -176,14 +180,16 @@ test.serial("Publish a release with generics and external storage provider (http
176180
const owner = "test_user";
177181
const repo = "test_repo";
178182
const env = { GITLAB_TOKEN: "gitlab_token" };
179-
const nextRelease = { gitHead: "123", gitTag: "v1.0.0", notes: "Test release note body" };
183+
const nextRelease = { gitHead: "123", gitTag: "v1.0.0", notes: "Test release note body", version: "1.0.0" };
180184
const options = { repositoryUrl: `https://gitlab.com/${owner}/${repo}.git` };
181185
const encodedRepoId = encodeURIComponent(`${owner}/${repo}`);
182186
const encodedGitTag = encodeURIComponent(nextRelease.gitTag);
187+
const encodedVersion = encodeURIComponent(nextRelease.version);
183188
const uploaded = { file: { url: "https://aws.example.com/bucket/gitlab/file.css" } };
184189
const generic = { path: "file.css", label: "Style package", target: "generic_package", status: "hidden" };
185190
const assets = [generic];
186191
const encodedLabel = encodeURIComponent(generic.label);
192+
const expectedUrl = `https://gitlab.com/api/v4/projects/${encodedRepoId}/packages/generic/release/${encodedVersion}/${encodedLabel}`;
187193
const gitlab = authenticate(env)
188194
.post(`/projects/${encodedRepoId}/releases`, {
189195
tag_name: nextRelease.gitTag,
@@ -192,7 +198,7 @@ test.serial("Publish a release with generics and external storage provider (http
192198
links: [
193199
{
194200
name: "Style package",
195-
url: uploaded.file.url,
201+
url: expectedUrl,
196202
link_type: "package",
197203
},
198204
],
@@ -201,15 +207,15 @@ test.serial("Publish a release with generics and external storage provider (http
201207
.reply(200);
202208
const gitlabUpload = authenticate(env)
203209
.put(
204-
`/projects/${encodedRepoId}/packages/generic/release/${encodedGitTag}/${encodedLabel}?status=${generic.status}&select=package_file`,
210+
`/projects/${encodedRepoId}/packages/generic/release/${encodedVersion}/${encodedLabel}?status=${generic.status}&select=package_file`,
205211
/\.test\s\{\}/gm
206212
)
207213
.reply(200, uploaded);
208214

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

211217
t.is(result.url, `https://gitlab.com/${owner}/${repo}/-/releases/${encodedGitTag}`);
212-
t.deepEqual(t.context.log.args[0], ["Uploaded file: %s", uploaded.file.url]);
218+
t.deepEqual(t.context.log.args[0], ["Uploaded file: %s (%s)", expectedUrl, uploaded.file.url]);
213219
t.deepEqual(t.context.log.args[1], ["Published GitLab release: %s", nextRelease.gitTag]);
214220
t.true(gitlabUpload.isDone());
215221
t.true(gitlab.isDone());
@@ -220,14 +226,16 @@ test.serial("Publish a release with generics and external storage provider (ftp)
220226
const owner = "test_user";
221227
const repo = "test_repo";
222228
const env = { GITLAB_TOKEN: "gitlab_token" };
223-
const nextRelease = { gitHead: "123", gitTag: "v1.0.0", notes: "Test release note body" };
229+
const nextRelease = { gitHead: "123", gitTag: "v1.0.0", notes: "Test release note body", version: "1.0.0" };
224230
const options = { repositoryUrl: `https://gitlab.com/${owner}/${repo}.git` };
225231
const encodedRepoId = encodeURIComponent(`${owner}/${repo}`);
226232
const encodedGitTag = encodeURIComponent(nextRelease.gitTag);
233+
const encodedVersion = encodeURIComponent(nextRelease.version);
227234
const uploaded = { file: { url: "ftp://drive.example.com/gitlab/file.css" } };
228235
const generic = { path: "file.css", label: "Style package", target: "generic_package", status: "hidden" };
229236
const assets = [generic];
230237
const encodedLabel = encodeURIComponent(generic.label);
238+
const expectedUrl = `https://gitlab.com/api/v4/projects/${encodedRepoId}/packages/generic/release/${encodedVersion}/${encodedLabel}`;
231239
const gitlab = authenticate(env)
232240
.post(`/projects/${encodedRepoId}/releases`, {
233241
tag_name: nextRelease.gitTag,
@@ -236,7 +244,7 @@ test.serial("Publish a release with generics and external storage provider (ftp)
236244
links: [
237245
{
238246
name: "Style package",
239-
url: uploaded.file.url,
247+
url: expectedUrl,
240248
link_type: "package",
241249
},
242250
],
@@ -245,15 +253,15 @@ test.serial("Publish a release with generics and external storage provider (ftp)
245253
.reply(200);
246254
const gitlabUpload = authenticate(env)
247255
.put(
248-
`/projects/${encodedRepoId}/packages/generic/release/${encodedGitTag}/${encodedLabel}?status=${generic.status}&select=package_file`,
256+
`/projects/${encodedRepoId}/packages/generic/release/${encodedVersion}/${encodedLabel}?status=${generic.status}&select=package_file`,
249257
/\.test\s\{\}/gm
250258
)
251259
.reply(200, uploaded);
252260

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

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

0 commit comments

Comments
 (0)