Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 0818f634dc |
@@ -8,6 +8,9 @@ ARG IS_RELEASE="false"
|
||||
# Set working directory
|
||||
WORKDIR /app
|
||||
|
||||
# Install git for version generation
|
||||
RUN apk add --no-cache git
|
||||
|
||||
# Copy package files
|
||||
COPY package*.json ./
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "jmespath-playground",
|
||||
"version": "1.4.2",
|
||||
"version": "1.4.3",
|
||||
"description": "A React-based web application for testing JMESPath expressions against JSON data",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
|
||||
@@ -108,6 +108,7 @@ Usage:
|
||||
Options:
|
||||
--all-arch Build for both arm64 and amd64 (default: build for host architecture only)
|
||||
--arch <arch> Target architecture (arm64 or amd64). Can be specified multiple times.
|
||||
--registry <id> Image registry (default: docker.io). Can also set JMESPATH_REGISTRY.
|
||||
--help, -h Show this help message and exit
|
||||
|
||||
Examples:
|
||||
@@ -115,6 +116,7 @@ Examples:
|
||||
build-image.mjs --all-arch # Builds for both arm64 and amd64
|
||||
build-image.mjs --arch arm64 # Builds for arm64 only
|
||||
build-image.mjs --arch arm64 --arch amd64 # Explicitly specify both
|
||||
build-image.mjs --registry docker.io # Use Docker Hub registry explicitly
|
||||
build-image.mjs -h # Show help`);
|
||||
}
|
||||
|
||||
@@ -134,6 +136,10 @@ async function main() {
|
||||
type: 'string',
|
||||
multiple: true,
|
||||
description: 'Target architecture (arm64 or amd64)'
|
||||
},
|
||||
registry: {
|
||||
type: 'string',
|
||||
description: 'Image registry (default: docker.io)'
|
||||
}
|
||||
},
|
||||
strict: true,
|
||||
@@ -173,14 +179,16 @@ async function main() {
|
||||
console.log(`Target architectures: ${architectures.join(', ')}`);
|
||||
|
||||
// Build container image
|
||||
const registry = values.registry || process.env.JMESPATH_REGISTRY || 'docker.io';
|
||||
const imageName = `${registry.replace(/\/$/, '')}/skoszewski/jmespath-playground`;
|
||||
const tags = isRelease
|
||||
? [
|
||||
`-t skoszewski/jmespath-playground:${version}`,
|
||||
`-t skoszewski/jmespath-playground:latest`
|
||||
`-t ${imageName}:${version}`,
|
||||
`-t ${imageName}:latest`
|
||||
].join(' ')
|
||||
: [
|
||||
`-t skoszewski/jmespath-playground:dev`,
|
||||
`-t skoszewski/jmespath-playground:latest`
|
||||
`-t ${imageName}:dev`,
|
||||
`-t ${imageName}:latest`
|
||||
].join(' ');
|
||||
|
||||
const archFlags = architectures.map(arch => `--arch ${arch}`).join(' ');
|
||||
@@ -200,15 +208,15 @@ async function main() {
|
||||
|
||||
if (isRelease) {
|
||||
console.log(`\nTo run the container:`);
|
||||
console.log(` ${containerTool} run --arch arm64 --name jmespathpg -p 3000:3000 skoszewski/jmespath-playground:${version}`);
|
||||
console.log(` ${containerTool} run --arch arm64 --name jmespathpg -p 3000:3000 ${imageName}:${version}`);
|
||||
if (containerTool === 'docker') {
|
||||
console.log(`\nTo push to Docker Hub:`);
|
||||
console.log(` docker push skoszewski/jmespath-playground:${version}`);
|
||||
console.log(` docker push skoszewski/jmespath-playground:latest`);
|
||||
console.log(` docker push ${imageName}:${version}`);
|
||||
console.log(` docker push ${imageName}:latest`);
|
||||
}
|
||||
} else {
|
||||
console.log(`\nTo run the container:`);
|
||||
console.log(` ${containerTool} run --arch arm64 --name jmespathpg -p 3000:3000 skoszewski/jmespath-playground:dev`);
|
||||
console.log(` ${containerTool} run --arch arm64 --name jmespathpg -p 3000:3000 ${imageName}:dev`);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -2,6 +2,24 @@ import { readFileSync, write, writeFileSync } from "fs";
|
||||
import { execSync } from "child_process";
|
||||
import semver from "semver";
|
||||
|
||||
export function isGitAvailable() {
|
||||
try {
|
||||
execSync("git --version", { stdio: "ignore" });
|
||||
return true;
|
||||
} catch (e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
export function isGitRepo() {
|
||||
try {
|
||||
execSync("git rev-parse --is-inside-work-tree", { stdio: "ignore" });
|
||||
return true;
|
||||
} catch (e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
export function getGitVersion() {
|
||||
let rawGitVersion;
|
||||
let gitVersion;
|
||||
@@ -28,26 +46,38 @@ export function getGitVersion() {
|
||||
}
|
||||
|
||||
export function generateVersionFile(versionFilePath) {
|
||||
if (!isGitAvailable()) {
|
||||
throw new Error("Git is required to generate version info.");
|
||||
}
|
||||
|
||||
// Read package.json version
|
||||
const packageVersion = JSON.parse(
|
||||
readFileSync("package.json", { encoding: "utf-8" }),
|
||||
).version;
|
||||
// Get version from git repository
|
||||
const gitVersion = getGitVersion();
|
||||
const gitBaseVersion = semver.coerce(gitVersion)?.version;
|
||||
let gitVersion = packageVersion;
|
||||
let gitBaseVersion = packageVersion;
|
||||
let isRelease = true;
|
||||
|
||||
// if git returned malformed version, throw error
|
||||
if (!gitBaseVersion || gitBaseVersion === "0.0.0") {
|
||||
throw new Error(
|
||||
"Cannot determine git version. Make sure the script is run in a git repository with tags.",
|
||||
);
|
||||
}
|
||||
if (isGitRepo()) {
|
||||
// Get version from git repository
|
||||
gitVersion = getGitVersion();
|
||||
gitBaseVersion = semver.coerce(gitVersion)?.version;
|
||||
|
||||
// Compare git version with package.json version
|
||||
if (semver.neq(gitBaseVersion, packageVersion)) {
|
||||
throw new Error(
|
||||
`Version mismatch: package.json version is ${packageVersion}, but git version is ${gitBaseVersion}`,
|
||||
);
|
||||
// if git returned malformed version, throw error
|
||||
if (!gitBaseVersion || gitBaseVersion === "0.0.0") {
|
||||
throw new Error(
|
||||
"Cannot determine git version. Make sure the script is run in a git repository with tags.",
|
||||
);
|
||||
}
|
||||
|
||||
// Compare git version with package.json version
|
||||
if (semver.neq(gitBaseVersion, packageVersion)) {
|
||||
throw new Error(
|
||||
`Version mismatch: package.json version is ${packageVersion}, but git version is ${gitBaseVersion}`,
|
||||
);
|
||||
}
|
||||
|
||||
isRelease = gitVersion === packageVersion;
|
||||
}
|
||||
|
||||
// Generate version file
|
||||
@@ -58,7 +88,7 @@ export function generateVersionFile(versionFilePath) {
|
||||
// Generated at: ${buildDate}
|
||||
|
||||
export const VERSION = '${packageVersion}';
|
||||
export const IS_RELEASE = ${gitVersion === packageVersion};
|
||||
export const IS_RELEASE = ${isRelease};
|
||||
export const BUILD_TIME = '${buildDate}';
|
||||
`,
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user