Skip to content

Commit

Permalink
feat: add support for copying unmanaged files
Browse files Browse the repository at this point in the history
Signed-off-by: Jakob Steiner <jakob.steiner@glasskube.eu>
  • Loading branch information
kosmoz committed May 23, 2024
1 parent d0fd278 commit 43ca399
Show file tree
Hide file tree
Showing 4 changed files with 53 additions and 11 deletions.
32 changes: 27 additions & 5 deletions src/commands/package/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,14 @@ import {SemVer} from 'semver';

import {getArtifactPackage, getArtifactPackageVersion} from '../../datasources/artifacthub/index.js';
import {getLatestRelease} from '../../datasources/github-release/index.js';
import {createNewManifestVersion, getLatestManifest, getLatestVersion, updateHelmManifest} from '../../manifest.js';
import {
copyUnmanagedFiles,
createNewManifestVersion,
getLatestManifest,
getLatestVersion,
updateHelmManifest,
} from '../../manifest.js';
import {withNextBuildNumber} from '../../package.js';
import {Paths, packagePaths} from '../../paths.js';
import {PackageReference, PlainManifest} from '../../types/glasskube/package-manifest.js';
import {parseArtifactHubReferenceUrl, parseManifestUrl} from '../../utils/url-parser.js';
Expand Down Expand Up @@ -102,10 +109,25 @@ export default class Package extends Command {
}
}

if (!flags['dry-run'] && (newPackageManifestAvailable || flags.force)) {
this.log('will create new version');
await createNewManifestVersion(packagePaths, packageManifest, newAppVersion);
this.log('latest version created');
if (newPackageManifestAvailable || flags.force) {
newAppVersion = await withNextBuildNumber(newAppVersion, packagePaths);
for (const manifest of packageManifest.manifests ?? []) {
if (
manifest.url.startsWith('https://packages.dl.glasskube.dev/') ||
manifest.url.startsWith('https://glasskube.github.io/')
) {
const newUrl = manifest.url.replace(currentAppVersion.raw, newAppVersion.raw);
this.log(`update manifest URL: ${manifest.url} -> ${newUrl}`);
manifest.url = newUrl;
}
}

if (!flags['dry-run']) {
this.log('will create new version');
await createNewManifestVersion(packagePaths, packageManifest, newAppVersion);
await copyUnmanagedFiles(packagePaths, currentAppVersion, newAppVersion);
this.log('latest version created');
}
}
}

Expand Down
22 changes: 16 additions & 6 deletions src/manifest.ts
Original file line number Diff line number Diff line change
@@ -1,20 +1,30 @@
import {copyFile} from 'node:fs/promises';
import {join} from 'node:path';
import {SemVer} from 'semver';
import * as YAML from 'yaml';

import {getNextBuildNumber, getPackageVersions} from './package.js';
import {getPackageVersions} from './package.js';
import {PackagePaths, PackageVersionPaths} from './paths.js';
import {ArtifactHubPackage, PackageManifest} from './types/types.js';
import {createDir, parseYaml, read, write} from './utils/io.js';
import {createDir, getFilesIn, parseYaml, read, write} from './utils/io.js';

export async function createNewManifestVersion(
packagePaths: PackagePaths,
packageManifest: PackageManifest,
latestAppVersion: SemVer,
) {
const buildNumber = await getNextBuildNumber(latestAppVersion, packagePaths);
const version = `v${latestAppVersion}+${buildNumber}`;
await writePackageManifestFile(packagePaths.version(version), packageManifest);
await updateVersionsFile(packagePaths, version);
await writePackageManifestFile(packagePaths.version(latestAppVersion.raw), packageManifest);
await updateVersionsFile(packagePaths, latestAppVersion.raw);
}

export async function copyUnmanagedFiles(pkg: PackagePaths, oldVersion: SemVer, newVersion: SemVer) {
const oldVersionDir = pkg.version(oldVersion.raw);
const newVersionDir = pkg.version(newVersion.raw);
await Promise.all(
(await getFilesIn(oldVersionDir.dirName()))
.filter(file => file !== 'package.yaml')
.map(async file => await copyFile(join(oldVersionDir.dirName(), file), join(newVersionDir.dirName(), file))),
);
}

async function writePackageManifestFile(paths: PackageVersionPaths, packageManifest: PackageManifest) {
Expand Down
5 changes: 5 additions & 0 deletions src/package.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,3 +19,8 @@ export async function getNextBuildNumber(appVersion: SemVer, pkg: PackagePaths)
const packageVersions = await getPackageVersions(pkg);
return Math.max(0, ...(await getBuildNumbers(appVersion, packageVersions))) + 1;
}

export async function withNextBuildNumber(appVersion: SemVer, pkg: PackagePaths): Promise<SemVer> {
const buildNumber = await getNextBuildNumber(appVersion, pkg);
return new SemVer(`v${appVersion}+${buildNumber}`);
}
5 changes: 5 additions & 0 deletions src/utils/io.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,3 +21,8 @@ export async function getFoldersIn(path: string): Promise<string[]> {
const allFiles = await fs.readdir(path, {withFileTypes: true});
return allFiles.filter(it => it.isDirectory()).map(it => it.name);
}

export async function getFilesIn(path: string): Promise<string[]> {
const allFiles = await fs.readdir(path, {withFileTypes: true});
return allFiles.filter(it => !it.isDirectory()).map(it => it.name);
}

0 comments on commit 43ca399

Please sign in to comment.