Skip to content

Commit

Permalink
fix: only check either helm or manifest
Browse files Browse the repository at this point in the history
also, don't crash if manifest URL can not be parsed

Signed-off-by: Jakob Steiner <jakob.steiner@glasskube.eu>
  • Loading branch information
kosmoz committed May 23, 2024
1 parent 43ca399 commit 1fb4311
Showing 1 changed file with 39 additions and 39 deletions.
78 changes: 39 additions & 39 deletions src/commands/package/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,10 @@ import {
getLatestVersion,
updateHelmManifest,
} from '../../manifest.js';
import {ManifestUrl} from '../../models/manifest-url.js';
import {withNextBuildNumber} from '../../package.js';
import {Paths, packagePaths} from '../../paths.js';
import {PackageReference, PlainManifest} from '../../types/glasskube/package-manifest.js';
import {PackageReference} from '../../types/glasskube/package-manifest.js';
import {parseArtifactHubReferenceUrl, parseManifestUrl} from '../../utils/url-parser.js';

export default class Package extends Command {
Expand Down Expand Up @@ -42,57 +43,28 @@ export default class Package extends Command {
const {flags} = await this.parse(Package);
const packagePaths = this.paths.package(flags.name);
const packageManifest = await getLatestManifest(packagePaths);
const newPackageManifests: PlainManifest[] = [];

let newPackageManifestAvailable = false;
const currentAppVersion = await getLatestVersion(packagePaths);
let newAppVersion = currentAppVersion;

for await (const plainManifest of packageManifest.manifests ?? []) {
const manifestUrl = parseManifestUrl(plainManifest.url);
this.log(
`found manifest ${manifestUrl.path} in ${manifestUrl.owner}/${manifestUrl.repo} with version ${manifestUrl.semVer}`,
);
const latestRelease = await getLatestRelease(manifestUrl);

if (newPackageManifestAvailable && latestRelease.compare(newAppVersion) !== 0) {
this.error('found different manifest version - appVersion resolution needed', {exit: 1});
}

if (latestRelease.compare(manifestUrl.semVer)) {
newAppVersion = latestRelease;
newPackageManifestAvailable = true;
this.log(`new release on GitHub: ${latestRelease}`);
newPackageManifests.push({
url: manifestUrl.raw.replace(manifestUrl.semVer.raw, latestRelease.raw),
});
} else {
this.log('no newer manifest release found');
}
}

if (newPackageManifests.length > 0) {
packageManifest.manifests = newPackageManifests;
}

if (packageManifest.helm) {
const currentChartVersion = new SemVer(packageManifest.helm.chartVersion).format();
this.log(`found Helm release of chart ${packageManifest.helm.chartName} with version ${currentChartVersion}`);
const currentChartVersion = new SemVer(packageManifest.helm.chartVersion);
this.log(`found Helm release of chart ${packageManifest.helm.chartName} with version ${currentChartVersion.raw}`);

const artifactHubUrl = this.findArtifactHubReference(packageManifest.references ?? []);

if (artifactHubUrl) {
const reference = parseArtifactHubReferenceUrl(artifactHubUrl.url);
const latestChart = await getArtifactPackage(reference);
const referenceUrl = parseArtifactHubReferenceUrl(artifactHubUrl.url);
const latestChart = await getArtifactPackage(referenceUrl);
const latestChartVersion = new SemVer(latestChart.version!);
if (latestChartVersion.compare(new SemVer(packageManifest.helm.chartVersion)) > 0) {
this.log(`new release on Artifact Hub: ${latestChartVersion} (old: ${currentChartVersion})`);
const currentChart = await getArtifactPackageVersion(reference, currentChartVersion);
if (currentAppVersion.compare(new SemVer(currentChart.version!)) === 0) {
if (latestChartVersion.compare(currentChartVersion) > 0) {
this.log(`new release on Artifact Hub: ${latestChartVersion} (old: ${currentChartVersion.format()})`);
const currentChart = await getArtifactPackageVersion(referenceUrl, currentChartVersion.format());
if (currentAppVersion.compare(currentChart.version!) === 0) {
this.log(`using chart version as package version for ${flags.name}: ${latestChartVersion}`);
newAppVersion = latestChartVersion;
newPackageManifestAvailable = true;
} else if (currentAppVersion.compare(new SemVer(currentChart.appVersion!)) === 0) {
} else if (currentAppVersion.compare(currentChart.appVersion!) === 0) {
this.log(`using app version as package version for ${flags.name}: ${latestChart.appVersion}`);
newAppVersion = new SemVer(latestChart.appVersion!);
newPackageManifestAvailable = true;
Expand All @@ -107,6 +79,34 @@ export default class Package extends Command {
} else {
this.warn(`${flags.name} has no ArtifactHub reference`);
}
} else {
for await (const plainManifest of packageManifest.manifests ?? []) {
let manifestUrl: ManifestUrl;
try {
manifestUrl = parseManifestUrl(plainManifest.url);
} catch (error) {
this.warn(error as Error);
continue;
}

this.log(
`found manifest ${manifestUrl.path} in ${manifestUrl.owner}/${manifestUrl.repo} with version ${manifestUrl.semVer}`,
);
const latestRelease = await getLatestRelease(manifestUrl);

if (newPackageManifestAvailable && latestRelease.compare(newAppVersion) !== 0) {
this.error('found different manifest version - appVersion resolution needed', {exit: 1});
}

if (latestRelease.compare(manifestUrl.semVer) > 0) {
newAppVersion = latestRelease;
newPackageManifestAvailable = true;
this.log(`new release on GitHub: ${latestRelease}`);
plainManifest.url = manifestUrl.raw.replace(manifestUrl.semVer.raw, latestRelease.raw);
} else {
this.log('no newer manifest release found');
}
}
}

if (newPackageManifestAvailable || flags.force) {
Expand Down

0 comments on commit 1fb4311

Please sign in to comment.