mirror of
https://github.com/shlinkio/shlink-web-client.git
synced 2024-12-23 01:20:24 +03:00
Split dist file creation and version replacing from main build script
This commit is contained in:
parent
82f8636af5
commit
c088259e46
7 changed files with 61 additions and 49 deletions
|
@ -1,4 +1,5 @@
|
||||||
./.github
|
./.github
|
||||||
|
./.stryker-tmp
|
||||||
./build
|
./build
|
||||||
./coverage
|
./coverage
|
||||||
./node_modules
|
./node_modules
|
||||||
|
|
2
.github/workflows/publish-release.yml
vendored
2
.github/workflows/publish-release.yml
vendored
|
@ -16,7 +16,7 @@ jobs:
|
||||||
with:
|
with:
|
||||||
node-version: 16.13
|
node-version: 16.13
|
||||||
- name: Generate release assets
|
- name: Generate release assets
|
||||||
run: npm ci && npm run build ${GITHUB_REF#refs/tags/v}
|
run: npm ci && VERSION=${GITHUB_REF#refs/tags/v} npm run build:dist
|
||||||
- name: Publish release with assets
|
- name: Publish release with assets
|
||||||
uses: docker://antonyurchenko/git-release:latest
|
uses: docker://antonyurchenko/git-release:latest
|
||||||
env:
|
env:
|
||||||
|
|
|
@ -2,8 +2,7 @@ FROM node:16.13-alpine as node
|
||||||
COPY . /shlink-web-client
|
COPY . /shlink-web-client
|
||||||
ARG VERSION="latest"
|
ARG VERSION="latest"
|
||||||
ENV VERSION ${VERSION}
|
ENV VERSION ${VERSION}
|
||||||
RUN cd /shlink-web-client && \
|
RUN cd /shlink-web-client && npm ci && npm run build
|
||||||
npm install && npm run build -- ${VERSION} --no-dist
|
|
||||||
|
|
||||||
FROM nginx:1.21-alpine
|
FROM nginx:1.21-alpine
|
||||||
LABEL maintainer="Alejandro Celaya <alejandro@alejandrocelaya.com>"
|
LABEL maintainer="Alejandro Celaya <alejandro@alejandrocelaya.com>"
|
||||||
|
|
|
@ -14,7 +14,8 @@
|
||||||
"lint:js:fix": "npm run lint:js -- --fix",
|
"lint:js:fix": "npm run lint:js -- --fix",
|
||||||
"start": "node scripts/start.js",
|
"start": "node scripts/start.js",
|
||||||
"serve:build": "serve ./build",
|
"serve:build": "serve ./build",
|
||||||
"build": "node scripts/build.js",
|
"build": "node scripts/build.js && node scripts/replace-version.js",
|
||||||
|
"build:dist": "npm run build && node scripts/create-dist-file.js",
|
||||||
"test": "node scripts/test.js --env=jsdom --colors --verbose",
|
"test": "node scripts/test.js --env=jsdom --colors --verbose",
|
||||||
"test:coverage": "npm run test -- --coverage --coverageReporters=text --coverageReporters=text-summary",
|
"test:coverage": "npm run test -- --coverage --coverageReporters=text --coverageReporters=text-summary",
|
||||||
"test:ci": "npm run test:coverage -- --coverageReporters=clover",
|
"test:ci": "npm run test:coverage -- --coverageReporters=clover",
|
||||||
|
|
|
@ -18,7 +18,6 @@ const chalk = require('chalk');
|
||||||
const fs = require('fs-extra');
|
const fs = require('fs-extra');
|
||||||
const webpack = require('webpack');
|
const webpack = require('webpack');
|
||||||
const bfj = require('bfj');
|
const bfj = require('bfj');
|
||||||
const AdmZip = require('adm-zip');
|
|
||||||
const checkRequiredFiles = require('react-dev-utils/checkRequiredFiles');
|
const checkRequiredFiles = require('react-dev-utils/checkRequiredFiles');
|
||||||
const formatWebpackMessages = require('react-dev-utils/formatWebpackMessages');
|
const formatWebpackMessages = require('react-dev-utils/formatWebpackMessages');
|
||||||
const FileSizeReporter = require('react-dev-utils/FileSizeReporter');
|
const FileSizeReporter = require('react-dev-utils/FileSizeReporter');
|
||||||
|
@ -44,8 +43,6 @@ if (!checkRequiredFiles([ paths.appHtml, paths.appIndexJs ])) {
|
||||||
const argvSliceStart = 2;
|
const argvSliceStart = 2;
|
||||||
const argv = process.argv.slice(argvSliceStart);
|
const argv = process.argv.slice(argvSliceStart);
|
||||||
const writeStatsJson = argv.includes('--stats');
|
const writeStatsJson = argv.includes('--stats');
|
||||||
const withoutDist = argv.includes('--no-dist');
|
|
||||||
const { version, hasVersion } = getVersionFromArgs(argv);
|
|
||||||
|
|
||||||
// Generate configuration
|
// Generate configuration
|
||||||
const config = configFactory('production');
|
const config = configFactory('production');
|
||||||
|
@ -84,7 +81,6 @@ checkBrowsers(paths.appPath, isInteractive)
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
console.log(chalk.green('Compiled successfully.\n'));
|
console.log(chalk.green('Compiled successfully.\n'));
|
||||||
hasVersion && replaceVersionPlaceholder(version);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log('File sizes after gzip:\n');
|
console.log('File sizes after gzip:\n');
|
||||||
|
@ -103,7 +99,6 @@ checkBrowsers(paths.appPath, isInteractive)
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
.then(() => hasVersion && !withoutDist && zipDist(version))
|
|
||||||
.catch((err) => {
|
.catch((err) => {
|
||||||
if (err && err.message) {
|
if (err && err.message) {
|
||||||
console.log(err.message);
|
console.log(err.message);
|
||||||
|
@ -185,43 +180,3 @@ function copyPublicFolder() {
|
||||||
filter: (file) => file !== paths.appHtml,
|
filter: (file) => file !== paths.appHtml,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function zipDist(version) {
|
|
||||||
const versionFileName = `./dist/shlink-web-client_${version}_dist.zip`;
|
|
||||||
|
|
||||||
console.log(chalk.cyan(`Generating dist file for version ${chalk.bold(version)}...`));
|
|
||||||
const zip = new AdmZip();
|
|
||||||
|
|
||||||
try {
|
|
||||||
if (fs.existsSync(versionFileName)) {
|
|
||||||
fs.unlink(versionFileName);
|
|
||||||
}
|
|
||||||
|
|
||||||
zip.addLocalFolder('./build', `shlink-web-client_${version}_dist`);
|
|
||||||
zip.writeZip(versionFileName);
|
|
||||||
console.log(chalk.green('Dist file properly generated'));
|
|
||||||
} catch (e) {
|
|
||||||
console.log(chalk.red('An error occurred while generating dist file'));
|
|
||||||
console.log(e);
|
|
||||||
}
|
|
||||||
console.log();
|
|
||||||
}
|
|
||||||
|
|
||||||
function getVersionFromArgs(argv) {
|
|
||||||
const [ version ] = argv;
|
|
||||||
|
|
||||||
return { version, hasVersion: !!version };
|
|
||||||
}
|
|
||||||
|
|
||||||
function replaceVersionPlaceholder(version) {
|
|
||||||
const staticJsFilesPath = './build/static/js';
|
|
||||||
const versionPlaceholder = '%_VERSION_%';
|
|
||||||
|
|
||||||
const isMainFile = (file) => file.startsWith('main.') && file.endsWith('.js');
|
|
||||||
const [ mainJsFile ] = fs.readdirSync(staticJsFilesPath).filter(isMainFile);
|
|
||||||
const filePath = `${staticJsFilesPath}/${mainJsFile}`;
|
|
||||||
const fileContent = fs.readFileSync(filePath, 'utf-8');
|
|
||||||
const replaced = fileContent.replace(versionPlaceholder, version);
|
|
||||||
|
|
||||||
fs.writeFileSync(filePath, replaced, 'utf-8');
|
|
||||||
}
|
|
||||||
|
|
36
scripts/create-dist-file.js
Normal file
36
scripts/create-dist-file.js
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
/* eslint-disable no-console, @typescript-eslint/prefer-nullish-coalescing, @typescript-eslint/promise-function-async, @typescript-eslint/prefer-optional-chain */
|
||||||
|
|
||||||
|
// Do this as the first thing so that any code reading it knows the right env.
|
||||||
|
process.env.BABEL_ENV = 'production';
|
||||||
|
process.env.NODE_ENV = 'production';
|
||||||
|
|
||||||
|
const chalk = require('chalk');
|
||||||
|
const AdmZip = require('adm-zip');
|
||||||
|
const fs = require('fs-extra');
|
||||||
|
|
||||||
|
function zipDist(version) {
|
||||||
|
const versionFileName = `./dist/shlink-web-client_${version}_dist.zip`;
|
||||||
|
|
||||||
|
console.log(chalk.cyan(`Generating dist file for version ${chalk.bold(version)}...`));
|
||||||
|
const zip = new AdmZip();
|
||||||
|
|
||||||
|
try {
|
||||||
|
if (fs.existsSync(versionFileName)) {
|
||||||
|
fs.unlink(versionFileName);
|
||||||
|
}
|
||||||
|
|
||||||
|
zip.addLocalFolder('./build', `shlink-web-client_${version}_dist`);
|
||||||
|
zip.writeZip(versionFileName);
|
||||||
|
console.log(chalk.green('Dist file properly generated'));
|
||||||
|
} catch (e) {
|
||||||
|
console.log(chalk.red('An error occurred while generating dist file'));
|
||||||
|
console.log(e);
|
||||||
|
}
|
||||||
|
console.log();
|
||||||
|
}
|
||||||
|
|
||||||
|
const version = process.env.VERSION;
|
||||||
|
|
||||||
|
if (version) {
|
||||||
|
zipDist(version);
|
||||||
|
}
|
20
scripts/replace-version.js
Normal file
20
scripts/replace-version.js
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
const fs = require('fs-extra');
|
||||||
|
|
||||||
|
function replaceVersionPlaceholder(version) {
|
||||||
|
const staticJsFilesPath = './build/static/js';
|
||||||
|
const versionPlaceholder = '%_VERSION_%';
|
||||||
|
|
||||||
|
const isMainFile = (file) => file.startsWith('main.') && file.endsWith('.js');
|
||||||
|
const [ mainJsFile ] = fs.readdirSync(staticJsFilesPath).filter(isMainFile);
|
||||||
|
const filePath = `${staticJsFilesPath}/${mainJsFile}`;
|
||||||
|
const fileContent = fs.readFileSync(filePath, 'utf-8');
|
||||||
|
const replaced = fileContent.replace(versionPlaceholder, version);
|
||||||
|
|
||||||
|
fs.writeFileSync(filePath, replaced, 'utf-8');
|
||||||
|
}
|
||||||
|
|
||||||
|
const version = process.env.VERSION;
|
||||||
|
|
||||||
|
if (version) {
|
||||||
|
replaceVersionPlaceholder(version);
|
||||||
|
}
|
Loading…
Reference in a new issue