@ticatec/omniflow-nexus 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +94 -0
- package/README_CN.md +94 -0
- package/dist/client/NexusClient.d.ts +42 -0
- package/dist/client/NexusClient.d.ts.map +1 -0
- package/dist/client/NexusClient.js +106 -0
- package/dist/client/NexusClient.js.map +1 -0
- package/dist/docker/NexusDockerPublisher.d.ts +18 -0
- package/dist/docker/NexusDockerPublisher.d.ts.map +1 -0
- package/dist/docker/NexusDockerPublisher.js +56 -0
- package/dist/docker/NexusDockerPublisher.js.map +1 -0
- package/dist/index.d.ts +29 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +38 -0
- package/dist/index.js.map +1 -0
- package/dist/maven/NexusMavenPublisher.d.ts +25 -0
- package/dist/maven/NexusMavenPublisher.d.ts.map +1 -0
- package/dist/maven/NexusMavenPublisher.js +194 -0
- package/dist/maven/NexusMavenPublisher.js.map +1 -0
- package/dist/npm/NexusNpmPublisher.d.ts +17 -0
- package/dist/npm/NexusNpmPublisher.d.ts.map +1 -0
- package/dist/npm/NexusNpmPublisher.js +67 -0
- package/dist/npm/NexusNpmPublisher.js.map +1 -0
- package/dist/raw/NexusRawPublisher.d.ts +28 -0
- package/dist/raw/NexusRawPublisher.d.ts.map +1 -0
- package/dist/raw/NexusRawPublisher.js +174 -0
- package/dist/raw/NexusRawPublisher.js.map +1 -0
- package/package.json +48 -0
- package/src/client/NexusClient.ts +143 -0
- package/src/docker/NexusDockerPublisher.ts +66 -0
- package/src/index.ts +54 -0
- package/src/maven/NexusMavenPublisher.ts +247 -0
- package/src/npm/NexusNpmPublisher.ts +81 -0
- package/src/raw/NexusRawPublisher.ts +217 -0
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
import { promises as fs } from 'fs';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import crypto from 'crypto';
|
|
4
|
+
import { BasePublisher, resolveMavenArtifactFilenames, mavenPomPathFor, isMavenArtifactFile } from '@ticatec/omniflow-artifact';
|
|
5
|
+
import { NexusClient } from '../client/NexusClient.js';
|
|
6
|
+
/**
|
|
7
|
+
* Sonatype Nexus 3 Maven Repository Publisher.
|
|
8
|
+
*
|
|
9
|
+
* Endpoint format: PUT {server}/repository/{repoName}/{groupId-as-path}/{artifactId}/{version}/{filename}
|
|
10
|
+
* Typically used with repositories like "maven-releases" or "maven-snapshots".
|
|
11
|
+
*/
|
|
12
|
+
export class NexusMavenPublisher extends BasePublisher {
|
|
13
|
+
id = 'nexus-maven';
|
|
14
|
+
name = 'Nexus 3 Maven Repository';
|
|
15
|
+
platform = 'nexus';
|
|
16
|
+
artifactType = 'maven';
|
|
17
|
+
priority = 20;
|
|
18
|
+
detect(registry) {
|
|
19
|
+
if (registry.type !== 'maven' && registry.type !== 'jar') {
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
const regName = (registry.name || '').toLowerCase();
|
|
23
|
+
if (regName === 'nexus' || regName.startsWith('nexus-')) {
|
|
24
|
+
return true;
|
|
25
|
+
}
|
|
26
|
+
const server = (registry.server || '').toLowerCase();
|
|
27
|
+
try {
|
|
28
|
+
const parsed = new URL(server.includes('://') ? server : `https://${server}`);
|
|
29
|
+
const host = parsed.hostname.toLowerCase();
|
|
30
|
+
// Exclude other known platforms
|
|
31
|
+
if (host === 'aliyun.com' ||
|
|
32
|
+
host.endsWith('.aliyun.com') ||
|
|
33
|
+
host.endsWith('.aliyuncs.com') ||
|
|
34
|
+
host === 'gitlab.com' ||
|
|
35
|
+
host.endsWith('.gitlab.com') ||
|
|
36
|
+
host === 'github.com' ||
|
|
37
|
+
host.endsWith('.github.com')) {
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
return host.includes('nexus') || parsed.pathname.includes('/repository/');
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
async login(registry, _options) {
|
|
47
|
+
const creds = this.resolveCredentials(registry);
|
|
48
|
+
if (!creds.token && (!creds.username || !creds.password)) {
|
|
49
|
+
this.log(` ℹ No auth credentials configured for Nexus Maven repository ${registry.server}`);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
buildTargetRef(artifact, _registry) {
|
|
53
|
+
try {
|
|
54
|
+
const { groupId, artifactId, version } = resolveMavenArtifactFilenames(artifact, undefined, undefined, 'Nexus');
|
|
55
|
+
return `${groupId}:${artifactId}:${version}`;
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
const version = artifact.tags && artifact.tags.length > 0 ? artifact.tags[0] : '1.0.0';
|
|
59
|
+
return `${artifact.name}:${version}`;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
async exists(artifact, registry, options) {
|
|
63
|
+
const creds = this.resolveCredentials(registry);
|
|
64
|
+
const client = new NexusClient({
|
|
65
|
+
baseUrl: registry.server,
|
|
66
|
+
username: creds.username,
|
|
67
|
+
password: creds.password,
|
|
68
|
+
token: creds.token,
|
|
69
|
+
timeoutMs: options?.timeoutMs
|
|
70
|
+
});
|
|
71
|
+
let jarPath = artifact.source;
|
|
72
|
+
if (jarPath) {
|
|
73
|
+
const stat = await fs.stat(jarPath).catch(() => null);
|
|
74
|
+
if (stat?.isDirectory()) {
|
|
75
|
+
const files = await fs.readdir(jarPath).catch(() => []);
|
|
76
|
+
const jarFile = files.find(f => isMavenArtifactFile(f));
|
|
77
|
+
if (jarFile) {
|
|
78
|
+
jarPath = path.join(jarPath, jarFile);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
const { groupId, artifactId, version, jarFilename } = resolveMavenArtifactFilenames(artifact, jarPath, undefined, 'Nexus');
|
|
83
|
+
const defaultRepo = version.toUpperCase().endsWith('-SNAPSHOT') ? 'maven-snapshots' : 'maven-releases';
|
|
84
|
+
const repoName = registry.namespace?.trim() ||
|
|
85
|
+
registry.options?.repository?.trim() ||
|
|
86
|
+
registry.metadata?.repository?.trim() ||
|
|
87
|
+
defaultRepo;
|
|
88
|
+
const targetUrl = client.getMavenArtifactUrl(repoName, groupId, artifactId, version, jarFilename);
|
|
89
|
+
try {
|
|
90
|
+
const res = await client.request(targetUrl, { method: 'HEAD' });
|
|
91
|
+
if (res.ok || res.status === 200 || res.status === 204) {
|
|
92
|
+
return true;
|
|
93
|
+
}
|
|
94
|
+
if (res.status === 404) {
|
|
95
|
+
return false;
|
|
96
|
+
}
|
|
97
|
+
const err = await client.extractErrorMessage(res);
|
|
98
|
+
throw new Error(`Failed to check Maven artifact existence (${res.status}): ${err}`);
|
|
99
|
+
}
|
|
100
|
+
catch (err) {
|
|
101
|
+
if (err?.message?.includes('Failed to check Maven artifact existence')) {
|
|
102
|
+
throw err;
|
|
103
|
+
}
|
|
104
|
+
throw new Error(`Failed to check Maven artifact existence: ${client.maskSecrets(err?.message || String(err))}`);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
async doPublish(artifact, registry, options) {
|
|
108
|
+
const creds = this.resolveCredentials(registry);
|
|
109
|
+
const client = new NexusClient({
|
|
110
|
+
baseUrl: registry.server,
|
|
111
|
+
username: creds.username,
|
|
112
|
+
password: creds.password,
|
|
113
|
+
token: creds.token,
|
|
114
|
+
timeoutMs: options?.timeoutMs
|
|
115
|
+
});
|
|
116
|
+
// Locate jar file
|
|
117
|
+
let jarPath = artifact.source;
|
|
118
|
+
const stat = await fs.stat(jarPath).catch(() => null);
|
|
119
|
+
if (stat?.isDirectory()) {
|
|
120
|
+
const files = await fs.readdir(jarPath);
|
|
121
|
+
const jarFile = files.find(f => isMavenArtifactFile(f));
|
|
122
|
+
if (!jarFile) {
|
|
123
|
+
throw new Error(`No jar/war artifact found in directory: ${jarPath}`);
|
|
124
|
+
}
|
|
125
|
+
jarPath = path.join(jarPath, jarFile);
|
|
126
|
+
}
|
|
127
|
+
const { groupId, artifactId, version, jarFilename, pomFilename } = resolveMavenArtifactFilenames(artifact, jarPath, undefined, 'Nexus');
|
|
128
|
+
const defaultRepo = version.toUpperCase().endsWith('-SNAPSHOT') ? 'maven-snapshots' : 'maven-releases';
|
|
129
|
+
const repoName = registry.namespace?.trim() ||
|
|
130
|
+
registry.options?.repository?.trim() ||
|
|
131
|
+
registry.metadata?.repository?.trim() ||
|
|
132
|
+
defaultRepo;
|
|
133
|
+
const jarBuffer = await fs.readFile(jarPath);
|
|
134
|
+
const digest = `sha256:${crypto.createHash('sha256').update(jarBuffer).digest('hex')}`;
|
|
135
|
+
const targetUrl = client.getMavenArtifactUrl(repoName, groupId, artifactId, version, jarFilename);
|
|
136
|
+
this.log(` 📤 Uploading Maven JAR to Nexus: ${client.maskSecrets(targetUrl)}`);
|
|
137
|
+
if (options?.dryRun) {
|
|
138
|
+
this.log(` [dryRun] Would PUT ${jarFilename} (${jarBuffer.length} bytes) to ${client.maskSecrets(targetUrl)}`);
|
|
139
|
+
return {
|
|
140
|
+
ref: `${groupId}:${artifactId}:${version}`,
|
|
141
|
+
digest,
|
|
142
|
+
metadata: { repoName, targetUrl, size: jarBuffer.length }
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
// The POM goes up first, deliberately.
|
|
146
|
+
//
|
|
147
|
+
// The existence probe checks for the jar/war, so uploading that last is what
|
|
148
|
+
// makes the probe mean "this artifact is complete". With the artifact first, a
|
|
149
|
+
// run that uploaded it and then failed on the POM would leave a coordinate that
|
|
150
|
+
// probes as present: the retry skips it as already published, and the POM never
|
|
151
|
+
// arrives — a jar in the repository forever, with no dependency information.
|
|
152
|
+
// Upload pom if exists
|
|
153
|
+
const pomPath = mavenPomPathFor(jarPath);
|
|
154
|
+
const pomStat = await fs.stat(pomPath).catch(() => null);
|
|
155
|
+
if (pomStat?.isFile()) {
|
|
156
|
+
const pomBuffer = await fs.readFile(pomPath);
|
|
157
|
+
const pomTargetUrl = client.getMavenArtifactUrl(repoName, groupId, artifactId, version, pomFilename);
|
|
158
|
+
this.log(` 📤 Uploading Maven POM to Nexus: ${client.maskSecrets(pomTargetUrl)}`);
|
|
159
|
+
const pomRes = await client.request(pomTargetUrl, {
|
|
160
|
+
method: 'PUT',
|
|
161
|
+
headers: { 'Content-Type': 'application/xml' },
|
|
162
|
+
body: pomBuffer
|
|
163
|
+
});
|
|
164
|
+
if (!pomRes.ok && pomRes.status !== 201 && pomRes.status !== 200) {
|
|
165
|
+
const pomErr = await client.extractErrorMessage(pomRes);
|
|
166
|
+
throw new Error(`Failed to upload Maven POM to Nexus (${pomRes.status}): ${pomErr}`);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
const res = await client.request(targetUrl, {
|
|
170
|
+
method: 'PUT',
|
|
171
|
+
headers: {
|
|
172
|
+
'Content-Type': 'application/java-archive'
|
|
173
|
+
},
|
|
174
|
+
body: jarBuffer
|
|
175
|
+
});
|
|
176
|
+
if (!res.ok && res.status !== 201 && res.status !== 200) {
|
|
177
|
+
const errText = await client.extractErrorMessage(res);
|
|
178
|
+
throw new Error(`Failed to upload Maven JAR to Nexus (${res.status}): ${errText}`);
|
|
179
|
+
}
|
|
180
|
+
return {
|
|
181
|
+
ref: `${groupId}:${artifactId}:${version}`,
|
|
182
|
+
digest,
|
|
183
|
+
metadata: {
|
|
184
|
+
groupId,
|
|
185
|
+
artifactId,
|
|
186
|
+
version,
|
|
187
|
+
repoName,
|
|
188
|
+
targetUrl,
|
|
189
|
+
size: jarBuffer.length
|
|
190
|
+
}
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
//# sourceMappingURL=NexusMavenPublisher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NexusMavenPublisher.js","sourceRoot":"","sources":["../../src/maven/NexusMavenPublisher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { BaseNpmPublisher } from '@ticatec/omniflow-artifact';
|
|
2
|
+
import type { RegistryConfig } from '@ticatec/omniflow-artifact';
|
|
3
|
+
/**
|
|
4
|
+
* Sonatype Nexus 3 NPM Package Registry Publisher.
|
|
5
|
+
*
|
|
6
|
+
* Endpoint format: {server}/repository/{repoName}/
|
|
7
|
+
* Typically used with repositories like "npm-hosted".
|
|
8
|
+
*/
|
|
9
|
+
export declare class NexusNpmPublisher extends BaseNpmPublisher {
|
|
10
|
+
readonly id = "nexus-npm";
|
|
11
|
+
readonly name = "Nexus 3 NPM Repository";
|
|
12
|
+
readonly platform = "nexus";
|
|
13
|
+
readonly priority = 20;
|
|
14
|
+
detect(registry: RegistryConfig): boolean;
|
|
15
|
+
normalizeRegistryUrl(server: string, _registryOrNamespace?: RegistryConfig | string): string;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=NexusNpmPublisher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NexusNpmPublisher.d.ts","sourceRoot":"","sources":["../../src/npm/NexusNpmPublisher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAA;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAEhE;;;;;GAKG;AACH,qBAAa,iBAAkB,SAAQ,gBAAgB;IACrD,QAAQ,CAAC,EAAE,eAAc;IACzB,QAAQ,CAAC,IAAI,4BAA2B;IACxC,QAAQ,CAAC,QAAQ,WAAU;IAC3B,SAAkB,QAAQ,MAAK;IAEtB,MAAM,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO;IAkCzC,oBAAoB,CAC3B,MAAM,EAAE,MAAM,EACd,oBAAoB,CAAC,EAAE,cAAc,GAAG,MAAM,GAC7C,MAAM;CA2BV"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { BaseNpmPublisher } from '@ticatec/omniflow-artifact';
|
|
2
|
+
/**
|
|
3
|
+
* Sonatype Nexus 3 NPM Package Registry Publisher.
|
|
4
|
+
*
|
|
5
|
+
* Endpoint format: {server}/repository/{repoName}/
|
|
6
|
+
* Typically used with repositories like "npm-hosted".
|
|
7
|
+
*/
|
|
8
|
+
export class NexusNpmPublisher extends BaseNpmPublisher {
|
|
9
|
+
id = 'nexus-npm';
|
|
10
|
+
name = 'Nexus 3 NPM Repository';
|
|
11
|
+
platform = 'nexus';
|
|
12
|
+
priority = 20;
|
|
13
|
+
detect(registry) {
|
|
14
|
+
if (registry.type !== 'npm') {
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
const regName = (registry.name || '').toLowerCase();
|
|
18
|
+
if (regName === 'nexus' || regName.startsWith('nexus-')) {
|
|
19
|
+
return true;
|
|
20
|
+
}
|
|
21
|
+
const server = (registry.server || '').toLowerCase();
|
|
22
|
+
try {
|
|
23
|
+
const parsed = new URL(server.includes('://') ? server : `https://${server}`);
|
|
24
|
+
const host = parsed.hostname.toLowerCase();
|
|
25
|
+
// Exclude other known platforms
|
|
26
|
+
if (host === 'aliyun.com' ||
|
|
27
|
+
host.endsWith('.aliyun.com') ||
|
|
28
|
+
host.endsWith('.aliyuncs.com') ||
|
|
29
|
+
host === 'gitlab.com' ||
|
|
30
|
+
host.endsWith('.gitlab.com') ||
|
|
31
|
+
host === 'github.com' ||
|
|
32
|
+
host.endsWith('.github.com')) {
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
return host.includes('nexus') || parsed.pathname.includes('/repository/');
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
normalizeRegistryUrl(server, _registryOrNamespace) {
|
|
42
|
+
let url = server.trim();
|
|
43
|
+
if (!/^https?:\/\//i.test(url)) {
|
|
44
|
+
url = `https://${url}`;
|
|
45
|
+
}
|
|
46
|
+
if (url.includes('/repository/')) {
|
|
47
|
+
return url.endsWith('/') ? url : `${url}/`;
|
|
48
|
+
}
|
|
49
|
+
let repoName;
|
|
50
|
+
if (typeof _registryOrNamespace === 'string') {
|
|
51
|
+
repoName = _registryOrNamespace.trim();
|
|
52
|
+
}
|
|
53
|
+
else if (_registryOrNamespace && typeof _registryOrNamespace === 'object') {
|
|
54
|
+
const reg = _registryOrNamespace;
|
|
55
|
+
repoName =
|
|
56
|
+
reg.namespace?.trim() ||
|
|
57
|
+
reg.options?.repository?.trim() ||
|
|
58
|
+
reg.options?.repoName?.trim() ||
|
|
59
|
+
reg.metadata?.repository?.trim() ||
|
|
60
|
+
reg.metadata?.repoName?.trim();
|
|
61
|
+
}
|
|
62
|
+
const cleanBase = url.replace(/\/+$/, '');
|
|
63
|
+
const targetRepo = repoName ? repoName.replace(/^\/+/, '').replace(/\/+$/, '') : 'npm-hosted';
|
|
64
|
+
return `${cleanBase}/repository/${targetRepo}/`;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=NexusNpmPublisher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NexusNpmPublisher.js","sourceRoot":"","sources":["../../src/npm/NexusNpmPublisher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { BasePublisher } from '@ticatec/omniflow-artifact';
|
|
2
|
+
import type { ArtifactPayload, DownloadOptions, DownloadResult, PublishOptions, RegistryConfig } from '@ticatec/omniflow-artifact';
|
|
3
|
+
/**
|
|
4
|
+
* Sonatype Nexus 3 Raw (Generic) Package Repository Publisher.
|
|
5
|
+
*
|
|
6
|
+
* Publishes arbitrary binary artifacts, tarballs (.tar.gz), or zip files
|
|
7
|
+
* to Nexus "raw (hosted)" repositories.
|
|
8
|
+
* Endpoint format: PUT {server}/repository/{repoName}/{path}/{filename}
|
|
9
|
+
*/
|
|
10
|
+
export declare class NexusRawPublisher extends BasePublisher {
|
|
11
|
+
readonly id = "nexus-raw";
|
|
12
|
+
readonly name = "Nexus 3 Raw Repository";
|
|
13
|
+
readonly platform = "nexus";
|
|
14
|
+
readonly artifactType = "generic";
|
|
15
|
+
readonly priority = 20;
|
|
16
|
+
detect(registry: RegistryConfig): boolean;
|
|
17
|
+
buildTargetRef(artifact: ArtifactPayload, registry: RegistryConfig): string;
|
|
18
|
+
login(registry: RegistryConfig, _options?: PublishOptions): Promise<void>;
|
|
19
|
+
exists(artifact: ArtifactPayload, registry: RegistryConfig, options?: PublishOptions): Promise<boolean>;
|
|
20
|
+
download(artifact: ArtifactPayload, registry: RegistryConfig, dest: string, options?: DownloadOptions): Promise<DownloadResult>;
|
|
21
|
+
protected doPublish(artifact: ArtifactPayload, registry: RegistryConfig, options?: PublishOptions): Promise<{
|
|
22
|
+
ref: string;
|
|
23
|
+
digest?: string;
|
|
24
|
+
metadata?: Record<string, unknown>;
|
|
25
|
+
}>;
|
|
26
|
+
}
|
|
27
|
+
export { NexusRawPublisher as NexusGenericPublisher };
|
|
28
|
+
//# sourceMappingURL=NexusRawPublisher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NexusRawPublisher.d.ts","sourceRoot":"","sources":["../../src/raw/NexusRawPublisher.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAC1D,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAGlI;;;;;;GAMG;AACH,qBAAa,iBAAkB,SAAQ,aAAa;IAClD,QAAQ,CAAC,EAAE,eAAc;IACzB,QAAQ,CAAC,IAAI,4BAA2B;IACxC,QAAQ,CAAC,QAAQ,WAAU;IAC3B,QAAQ,CAAC,YAAY,aAAY;IACjC,SAAkB,QAAQ,MAAK;IAEtB,MAAM,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO;IAkCzC,cAAc,CAAC,QAAQ,EAAE,eAAe,EAAE,QAAQ,EAAE,cAAc,GAAG,MAAM;IAW9E,KAAK,CAAC,QAAQ,EAAE,cAAc,EAAE,QAAQ,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAOhE,MAAM,CACnB,QAAQ,EAAE,eAAe,EACzB,QAAQ,EAAE,cAAc,EACxB,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,OAAO,CAAC;IAoCJ,QAAQ,CACrB,QAAQ,EAAE,eAAe,EACzB,QAAQ,EAAE,cAAc,EACxB,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,cAAc,CAAC;cAwBV,SAAS,CACvB,QAAQ,EAAE,eAAe,EACzB,QAAQ,EAAE,cAAc,EACxB,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC;QACT,GAAG,EAAE,MAAM,CAAA;QACX,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KACnC,CAAC;CA+DH;AAGD,OAAO,EAAE,iBAAiB,IAAI,qBAAqB,EAAE,CAAA"}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import { promises as fs } from 'fs';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import crypto from 'crypto';
|
|
4
|
+
import { BasePublisher } from '@ticatec/omniflow-artifact';
|
|
5
|
+
import { NexusClient } from '../client/NexusClient.js';
|
|
6
|
+
/**
|
|
7
|
+
* Sonatype Nexus 3 Raw (Generic) Package Repository Publisher.
|
|
8
|
+
*
|
|
9
|
+
* Publishes arbitrary binary artifacts, tarballs (.tar.gz), or zip files
|
|
10
|
+
* to Nexus "raw (hosted)" repositories.
|
|
11
|
+
* Endpoint format: PUT {server}/repository/{repoName}/{path}/{filename}
|
|
12
|
+
*/
|
|
13
|
+
export class NexusRawPublisher extends BasePublisher {
|
|
14
|
+
id = 'nexus-raw';
|
|
15
|
+
name = 'Nexus 3 Raw Repository';
|
|
16
|
+
platform = 'nexus';
|
|
17
|
+
artifactType = 'generic';
|
|
18
|
+
priority = 20;
|
|
19
|
+
detect(registry) {
|
|
20
|
+
if (registry.type !== 'generic' && registry.type !== 'raw' && registry.type !== 'archive') {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
const regName = (registry.name || '').toLowerCase();
|
|
24
|
+
if (regName === 'nexus' || regName.startsWith('nexus-') || regName === 'nexus-raw') {
|
|
25
|
+
return true;
|
|
26
|
+
}
|
|
27
|
+
const server = (registry.server || '').toLowerCase();
|
|
28
|
+
try {
|
|
29
|
+
const parsed = new URL(server.includes('://') ? server : `https://${server}`);
|
|
30
|
+
const host = parsed.hostname.toLowerCase();
|
|
31
|
+
// Exclude other known platforms
|
|
32
|
+
if (host === 'aliyun.com' ||
|
|
33
|
+
host.endsWith('.aliyun.com') ||
|
|
34
|
+
host.endsWith('.aliyuncs.com') ||
|
|
35
|
+
host === 'gitlab.com' ||
|
|
36
|
+
host.endsWith('.gitlab.com') ||
|
|
37
|
+
host === 'github.com' ||
|
|
38
|
+
host.endsWith('.github.com')) {
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
return host.includes('nexus') || parsed.pathname.includes('/repository/raw');
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
buildTargetRef(artifact, registry) {
|
|
48
|
+
const repoName = registry.namespace?.trim() ||
|
|
49
|
+
registry.options?.repository?.trim() ||
|
|
50
|
+
registry.metadata?.repository?.trim() ||
|
|
51
|
+
'raw-hosted';
|
|
52
|
+
const version = artifact.tags && artifact.tags.length > 0 ? artifact.tags[0] : 'latest';
|
|
53
|
+
const filename = artifact.source ? path.basename(artifact.source) : artifact.name;
|
|
54
|
+
return `${repoName}/${artifact.name}/${version}/${filename}`;
|
|
55
|
+
}
|
|
56
|
+
async login(registry, _options) {
|
|
57
|
+
const creds = this.resolveCredentials(registry);
|
|
58
|
+
if (!creds.token && (!creds.username || !creds.password)) {
|
|
59
|
+
this.log(` ℹ No auth credentials configured for Nexus Raw repository ${registry.server}`);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
async exists(artifact, registry, options) {
|
|
63
|
+
const creds = this.resolveCredentials(registry);
|
|
64
|
+
const client = new NexusClient({
|
|
65
|
+
baseUrl: registry.server,
|
|
66
|
+
username: creds.username,
|
|
67
|
+
password: creds.password,
|
|
68
|
+
token: creds.token,
|
|
69
|
+
timeoutMs: options?.timeoutMs
|
|
70
|
+
});
|
|
71
|
+
const repoName = registry.namespace || 'raw-hosted';
|
|
72
|
+
const version = artifact.tags && artifact.tags.length > 0 ? artifact.tags[0] : 'latest';
|
|
73
|
+
const packageName = artifact.name;
|
|
74
|
+
const filename = artifact.source ? path.basename(artifact.source) : artifact.name;
|
|
75
|
+
const subpath = `${packageName}/${version}`;
|
|
76
|
+
const targetUrl = client.getRawArtifactUrl(repoName, subpath, filename);
|
|
77
|
+
try {
|
|
78
|
+
const res = await client.request(targetUrl, { method: 'HEAD' });
|
|
79
|
+
if (res.ok || res.status === 200 || res.status === 204) {
|
|
80
|
+
return true;
|
|
81
|
+
}
|
|
82
|
+
if (res.status === 404) {
|
|
83
|
+
return false;
|
|
84
|
+
}
|
|
85
|
+
const err = await client.extractErrorMessage(res);
|
|
86
|
+
throw new Error(`Failed to check Raw package existence (${res.status}): ${err}`);
|
|
87
|
+
}
|
|
88
|
+
catch (err) {
|
|
89
|
+
if (err?.message?.includes('Failed to check Raw package existence')) {
|
|
90
|
+
throw err;
|
|
91
|
+
}
|
|
92
|
+
throw new Error(`Failed to check Raw package existence: ${client.maskSecrets(err?.message || String(err))}`);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
async download(artifact, registry, dest, options) {
|
|
96
|
+
const creds = this.resolveCredentials(registry);
|
|
97
|
+
const client = new NexusClient({
|
|
98
|
+
baseUrl: registry.server,
|
|
99
|
+
username: creds.username,
|
|
100
|
+
password: creds.password,
|
|
101
|
+
token: creds.token,
|
|
102
|
+
timeoutMs: options?.timeoutMs
|
|
103
|
+
});
|
|
104
|
+
const repoName = registry.namespace || 'raw-hosted';
|
|
105
|
+
const version = artifact.tags?.[0] || 'latest';
|
|
106
|
+
const filename = artifact.source ? path.basename(artifact.source) : artifact.name;
|
|
107
|
+
const targetUrl = client.getRawArtifactUrl(repoName, `${artifact.name}/${version}`, filename);
|
|
108
|
+
const masked = client.maskSecrets(targetUrl);
|
|
109
|
+
this.log(` 📥 Downloading ${artifact.name} ${version} from Nexus: ${masked}`);
|
|
110
|
+
const res = await client.request(targetUrl, { method: 'GET' });
|
|
111
|
+
if (!res.ok) {
|
|
112
|
+
throw await this.downloadError(res, `${artifact.name} ${version} (${filename})`, masked);
|
|
113
|
+
}
|
|
114
|
+
return this.saveResponse(res, dest, masked);
|
|
115
|
+
}
|
|
116
|
+
async doPublish(artifact, registry, options) {
|
|
117
|
+
const creds = this.resolveCredentials(registry);
|
|
118
|
+
const client = new NexusClient({
|
|
119
|
+
baseUrl: registry.server,
|
|
120
|
+
username: creds.username,
|
|
121
|
+
password: creds.password,
|
|
122
|
+
token: creds.token,
|
|
123
|
+
timeoutMs: options?.timeoutMs
|
|
124
|
+
});
|
|
125
|
+
const repoName = registry.namespace || 'raw-hosted';
|
|
126
|
+
const version = artifact.tags && artifact.tags.length > 0 ? artifact.tags[0] : 'latest';
|
|
127
|
+
const packageName = artifact.name;
|
|
128
|
+
let filePath = artifact.source;
|
|
129
|
+
const stat = await fs.stat(filePath).catch(() => null);
|
|
130
|
+
if (!stat || !stat.isFile()) {
|
|
131
|
+
throw new Error(`Nexus Raw artifact source must be an existing file: ${filePath}`);
|
|
132
|
+
}
|
|
133
|
+
const filename = path.basename(filePath);
|
|
134
|
+
const fileBuffer = await fs.readFile(filePath);
|
|
135
|
+
const digest = `sha256:${crypto.createHash('sha256').update(fileBuffer).digest('hex')}`;
|
|
136
|
+
const subpath = `${packageName}/${version}`;
|
|
137
|
+
const targetUrl = client.getRawArtifactUrl(repoName, subpath, filename);
|
|
138
|
+
this.log(` 📤 Uploading Raw package file to Nexus: ${client.maskSecrets(targetUrl)}`);
|
|
139
|
+
if (options?.dryRun) {
|
|
140
|
+
this.log(` [dryRun] Would PUT ${filename} (${fileBuffer.length} bytes) to ${client.maskSecrets(targetUrl)}`);
|
|
141
|
+
return {
|
|
142
|
+
ref: `${repoName}/${subpath}/${filename}`,
|
|
143
|
+
digest,
|
|
144
|
+
metadata: { repoName, subpath, filename, targetUrl, size: fileBuffer.length }
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
const res = await client.request(targetUrl, {
|
|
148
|
+
method: 'PUT',
|
|
149
|
+
headers: {
|
|
150
|
+
'Content-Type': 'application/octet-stream'
|
|
151
|
+
},
|
|
152
|
+
body: fileBuffer
|
|
153
|
+
});
|
|
154
|
+
if (!res.ok && res.status !== 201 && res.status !== 200) {
|
|
155
|
+
const errText = await client.extractErrorMessage(res);
|
|
156
|
+
throw new Error(`Failed to upload Raw package to Nexus (${res.status}): ${errText}`);
|
|
157
|
+
}
|
|
158
|
+
return {
|
|
159
|
+
ref: `${repoName}/${subpath}/${filename}`,
|
|
160
|
+
digest,
|
|
161
|
+
metadata: {
|
|
162
|
+
repoName,
|
|
163
|
+
packageName,
|
|
164
|
+
version,
|
|
165
|
+
filename,
|
|
166
|
+
targetUrl,
|
|
167
|
+
size: fileBuffer.length
|
|
168
|
+
}
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
// Convenient alias
|
|
173
|
+
export { NexusRawPublisher as NexusGenericPublisher };
|
|
174
|
+
//# sourceMappingURL=NexusRawPublisher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NexusRawPublisher.js","sourceRoot":"","sources":["../../src/raw/NexusRawPublisher.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@ticatec/omniflow-nexus",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Sonatype Nexus 3 artifact repository driver for OmniFlow: Maven, NPM, Docker, and Raw generic packages",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"import": "./dist/index.js"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"license": "MIT",
|
|
15
|
+
"dependencies": {
|
|
16
|
+
"@ticatec/omniflow-artifact": "^1.0.0",
|
|
17
|
+
"@ticatec/omniflow-core": "^1.0.0"
|
|
18
|
+
},
|
|
19
|
+
"devDependencies": {
|
|
20
|
+
"@jest/globals": "^30.4.1",
|
|
21
|
+
"@types/jest": "^30.0.0",
|
|
22
|
+
"@types/node": "^22.10.2",
|
|
23
|
+
"jest": "^30.4.2",
|
|
24
|
+
"ts-jest": "^29.4.9",
|
|
25
|
+
"typescript": "^5.7.2"
|
|
26
|
+
},
|
|
27
|
+
"engines": {
|
|
28
|
+
"node": ">=20.0.0"
|
|
29
|
+
},
|
|
30
|
+
"files": [
|
|
31
|
+
"dist",
|
|
32
|
+
"src",
|
|
33
|
+
"README.md",
|
|
34
|
+
"README_CN.md",
|
|
35
|
+
"LICENSE"
|
|
36
|
+
],
|
|
37
|
+
"publishConfig": {
|
|
38
|
+
"access": "public"
|
|
39
|
+
},
|
|
40
|
+
"scripts": {
|
|
41
|
+
"build": "tsc",
|
|
42
|
+
"clean": "rm -rf dist",
|
|
43
|
+
"prebuild": "npm run clean",
|
|
44
|
+
"test": "NODE_OPTIONS=--experimental-vm-modules jest",
|
|
45
|
+
"typecheck": "tsc --noEmit",
|
|
46
|
+
"publish:npm": "pnpm publish --access public --no-git-checks"
|
|
47
|
+
}
|
|
48
|
+
}
|