Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| e22b3c82a2 | |||
| c9ce0d14b9 | |||
| ef2c1931d8 | |||
| d027459678 |
25
Dockerfile
25
Dockerfile
@@ -1,6 +1,10 @@
|
|||||||
# Build stage
|
# Build stage
|
||||||
FROM node:24-alpine AS builder
|
FROM node:24-alpine AS builder
|
||||||
|
|
||||||
|
# Accept build arguments for version info
|
||||||
|
ARG VERSION=""
|
||||||
|
ARG IS_RELEASE="false"
|
||||||
|
|
||||||
# Set working directory
|
# Set working directory
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|
||||||
@@ -16,8 +20,25 @@ COPY public/ ./public/
|
|||||||
COPY scripts/ ./scripts/
|
COPY scripts/ ./scripts/
|
||||||
COPY server.js ./server.js
|
COPY server.js ./server.js
|
||||||
|
|
||||||
# Build the application
|
# Generate version.js if version info provided, otherwise run normal build
|
||||||
RUN npm run build
|
RUN if [ -n "$VERSION" ]; then \
|
||||||
|
echo "// Auto-generated version file - do not edit manually" > src/version.js && \
|
||||||
|
echo "// Generated at: $(date -Iseconds)" >> src/version.js && \
|
||||||
|
echo "" >> src/version.js && \
|
||||||
|
echo "export const VERSION = '$VERSION';" >> src/version.js && \
|
||||||
|
echo "export const IS_RELEASE = $IS_RELEASE;" >> src/version.js && \
|
||||||
|
echo "export const BUILD_TIME = '$(date -Iseconds)';" >> src/version.js && \
|
||||||
|
echo "📝 Generated version.js with VERSION=$VERSION, IS_RELEASE=$IS_RELEASE"; \
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Build the application (skip prebuild if we already generated version.js)
|
||||||
|
RUN if [ -n "$VERSION" ]; then \
|
||||||
|
echo "🚀 Building with pre-generated version.js" && \
|
||||||
|
npx react-scripts build; \
|
||||||
|
else \
|
||||||
|
echo "🚀 Building with version-check.js" && \
|
||||||
|
npm run build; \
|
||||||
|
fi
|
||||||
|
|
||||||
# Production stage
|
# Production stage
|
||||||
FROM node:24-alpine AS production
|
FROM node:24-alpine AS production
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "jmespath-playground",
|
"name": "jmespath-playground",
|
||||||
"version": "1.1.2",
|
"version": "1.1.6",
|
||||||
"description": "A React-based web application for testing JMESPath expressions against JSON data",
|
"description": "A React-based web application for testing JMESPath expressions against JSON data",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|||||||
63
scripts/build-image.sh
Executable file
63
scripts/build-image.sh
Executable file
@@ -0,0 +1,63 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# JMESPath Testing Tool - Docker Image Build Script
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
echo "🐳 JMESPath Testing Tool - Docker Image Build"
|
||||||
|
echo "=============================================="
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Check if Docker is available
|
||||||
|
if ! command -v docker &> /dev/null; then
|
||||||
|
echo "❌ Docker not found. Please install Docker to build container images."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Determine version information for Docker build
|
||||||
|
VERSION=$(git tag --points-at HEAD 2>/dev/null | sed 's/^v//' | head -n 1)
|
||||||
|
|
||||||
|
if [ -n "$VERSION" ]; then
|
||||||
|
# We're at a tagged commit - release build
|
||||||
|
echo "📦 Building release version: $VERSION"
|
||||||
|
docker build \
|
||||||
|
--build-arg VERSION="$VERSION" \
|
||||||
|
--build-arg IS_RELEASE="true" \
|
||||||
|
-t skoszewski/jmespath-playground:$VERSION \
|
||||||
|
-t skoszewski/jmespath-playground:latest .
|
||||||
|
echo "✅ Built Docker images: skoszewski/jmespath-playground:$VERSION, skoszewski/jmespath-playground:latest"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "To run the release container:"
|
||||||
|
echo " docker run -p 3000:3000 skoszewski/jmespath-playground:$VERSION"
|
||||||
|
echo " docker run -p 3000:3000 skoszewski/jmespath-playground:latest"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "To push to Docker Hub:"
|
||||||
|
echo " docker push skoszewski/jmespath-playground:$VERSION"
|
||||||
|
echo " docker push skoszewski/jmespath-playground:latest"
|
||||||
|
else
|
||||||
|
# Development build
|
||||||
|
PACKAGE_VERSION=$(grep '"version"' package.json | cut -d'"' -f4)
|
||||||
|
DEV_VERSION="${PACKAGE_VERSION}-dev"
|
||||||
|
echo "📦 Building development version: $DEV_VERSION"
|
||||||
|
docker build \
|
||||||
|
--build-arg VERSION="$DEV_VERSION" \
|
||||||
|
--build-arg IS_RELEASE="false" \
|
||||||
|
-t skoszewski/jmespath-playground:dev \
|
||||||
|
-t skoszewski/jmespath-playground:latest .
|
||||||
|
echo "✅ Built Docker images: skoszewski/jmespath-playground:dev, skoszewski/jmespath-playground:latest"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "To run the development container:"
|
||||||
|
echo " docker run -p 3000:3000 skoszewski/jmespath-playground:dev"
|
||||||
|
echo " docker run -p 3000:3000 skoszewski/jmespath-playground:latest"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "To push to Docker Hub:"
|
||||||
|
echo " docker push skoszewski/jmespath-playground:dev"
|
||||||
|
echo " docker push skoszewski/jmespath-playground:latest"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "🎉 Docker image build completed successfully!"
|
||||||
@@ -30,20 +30,10 @@ npm install
|
|||||||
echo "🔨 Building production bundle..."
|
echo "🔨 Building production bundle..."
|
||||||
npm run build
|
npm run build
|
||||||
|
|
||||||
# Optional container build with Docker
|
|
||||||
if command -v docker &> /dev/null; then
|
|
||||||
echo "🐳 Building Docker container (optional)..."
|
|
||||||
docker build -t jmespath-playground .
|
|
||||||
else
|
|
||||||
echo "💡 Docker not found. Container build is optional."
|
|
||||||
echo " Install Docker if you want to build containers."
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "✅ Build completed successfully!"
|
echo "✅ Build completed successfully!"
|
||||||
echo ""
|
echo ""
|
||||||
echo "To run the application:"
|
echo "To run the application:"
|
||||||
echo " npm run serve # Serve production build locally"
|
echo " npm run server # Run integrated server locally"
|
||||||
echo " docker run -p 3000:3000 jmespath-playground # Run container (if built)"
|
echo ""
|
||||||
if command -v docker &> /dev/null; then
|
echo "To build Docker image:"
|
||||||
echo " docker run -p 3000:3000 jmespath-playground # Run with Docker"
|
echo " scripts/build-image.sh # Build Docker container image"
|
||||||
fi
|
|
||||||
@@ -4,18 +4,20 @@ const fs = require('fs');
|
|||||||
const { execSync } = require('child_process');
|
const { execSync } = require('child_process');
|
||||||
|
|
||||||
function showUsage() {
|
function showUsage() {
|
||||||
console.log('Usage: node scripts/new-version.js <version> [--force]');
|
console.log('Usage: node scripts/new-version.js <version> [--force] [-m|--message "commit message"]');
|
||||||
console.log(' node scripts/new-version.js --check <version>');
|
console.log(' node scripts/new-version.js --check <version>');
|
||||||
console.log('');
|
console.log('');
|
||||||
console.log('Creates a new version by tagging the current commit.');
|
console.log('Creates a new version by tagging the current commit.');
|
||||||
console.log('');
|
console.log('');
|
||||||
console.log('Options:');
|
console.log('Options:');
|
||||||
console.log(' --force Force version creation even with dirty repo or package.json mismatch');
|
console.log(' --force Force version creation even with dirty repo or package.json mismatch');
|
||||||
console.log(' --check Analyze repository status and report what would happen for specified version');
|
console.log(' --check Analyze repository status and report what would happen for specified version');
|
||||||
|
console.log(' -m, --message TEXT Custom commit message (only used when commit is needed)');
|
||||||
console.log('');
|
console.log('');
|
||||||
console.log('Example:');
|
console.log('Example:');
|
||||||
console.log(' node scripts/new-version.js 1.2.0');
|
console.log(' node scripts/new-version.js 1.2.0');
|
||||||
console.log(' node scripts/new-version.js 1.2.0 --force');
|
console.log(' node scripts/new-version.js 1.2.0 --force');
|
||||||
|
console.log(' node scripts/new-version.js 1.2.0 -m "Add new feature XYZ"');
|
||||||
console.log(' node scripts/new-version.js --check 1.3.0');
|
console.log(' node scripts/new-version.js --check 1.3.0');
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -178,10 +180,17 @@ function main() {
|
|||||||
const isCheck = args.includes('--check');
|
const isCheck = args.includes('--check');
|
||||||
const isForce = args.includes('--force');
|
const isForce = args.includes('--force');
|
||||||
|
|
||||||
|
// Parse custom commit message
|
||||||
|
let customMessage = null;
|
||||||
|
const messageIndex = args.findIndex(arg => arg === '-m' || arg === '--message');
|
||||||
|
if (messageIndex !== -1 && messageIndex + 1 < args.length) {
|
||||||
|
customMessage = args[messageIndex + 1];
|
||||||
|
}
|
||||||
|
|
||||||
let newVersion;
|
let newVersion;
|
||||||
if (isCheck) {
|
if (isCheck) {
|
||||||
// For --check, version is required
|
// For --check, version is required
|
||||||
newVersion = args.find(arg => !arg.startsWith('--'));
|
newVersion = args.find(arg => !arg.startsWith('--') && arg !== '-m' && arg !== customMessage);
|
||||||
if (!newVersion) {
|
if (!newVersion) {
|
||||||
console.error('Error: Version argument required for --check');
|
console.error('Error: Version argument required for --check');
|
||||||
showUsage();
|
showUsage();
|
||||||
@@ -189,11 +198,8 @@ function main() {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// For normal operation, version is required
|
// For normal operation, version is required
|
||||||
newVersion = args[0];
|
newVersion = args.find(arg => !arg.startsWith('--') && arg !== '-m' && arg !== customMessage);
|
||||||
if (!newVersion || newVersion.startsWith('-')) {
|
if (!newVersion) {
|
||||||
console.error('Error: Version argument required');
|
|
||||||
showUsage();
|
|
||||||
process.exit(1);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -268,7 +274,7 @@ function main() {
|
|||||||
execSync('git add .', { stdio: 'inherit' });
|
execSync('git add .', { stdio: 'inherit' });
|
||||||
|
|
||||||
// Commit
|
// Commit
|
||||||
const commitMessage = needsPackageUpdate ? `Version ${newVersion}` : `Prepare for version ${newVersion}`;
|
const commitMessage = customMessage || (needsPackageUpdate ? `Version ${newVersion}` : `Prepare for version ${newVersion}`);
|
||||||
execSync(`git commit -m "${commitMessage}"`, { stdio: 'inherit' });
|
execSync(`git commit -m "${commitMessage}"`, { stdio: 'inherit' });
|
||||||
console.log(`✅ Committed changes`);
|
console.log(`✅ Committed changes`);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
Reference in New Issue
Block a user