diff --git a/.github/workflows/on-tag.yml b/.github/workflows/on-tag.yml index c45e453c7..a7a9929d9 100644 --- a/.github/workflows/on-tag.yml +++ b/.github/workflows/on-tag.yml @@ -27,6 +27,9 @@ jobs: - name: Show set environment variables run: | printf " TAG: %s\n" "$TAG" + + - name: Add SHORT_SHA env property with commit short sha + run: echo "SHORT_SHA=`echo ${GITHUB_SHA} | cut -c1-8`" >> $GITHUB_ENV - name: Login to Docker for building run: echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin @@ -64,14 +67,6 @@ jobs: --cache-to "type=local,dest=/tmp/.buildx-cache" \ --platform linux/amd64,linux/arm64,linux/arm/v7 \ --tag ${{ secrets.DOCKER_HUB_USER }}/${{ matrix.service }}:$TAG \ - --output "type=registry" ./${{ matrix.service }}/ - - - name: Run Docker buildx for ${{ matrix.service }} against latest - run: | - docker buildx build \ - --cache-from "type=local,src=/tmp/.buildx-cache" \ - --cache-to "type=local,dest=/tmp/.buildx-cache" \ - --platform linux/amd64,linux/arm64,linux/arm/v7 \ --tag ${{ secrets.DOCKER_HUB_USER }}/${{ matrix.service }}:latest \ - --output "type=registry" ./${{ matrix.service }}/ - + --output "type=registry" ./${{ matrix.service }}/ \ + --build-arg commitHash=$SHORT_SHA diff --git a/docker/frontend/Dockerfile b/docker/frontend/Dockerfile index a9ed8d674..2293f59a9 100644 --- a/docker/frontend/Dockerfile +++ b/docker/frontend/Dockerfile @@ -1,5 +1,8 @@ FROM node:12-buster-slim AS builder +ARG commitHash +ENV DOCKER_COMMIT_HASH=${commitHash} + WORKDIR /build COPY . . RUN apt-get update diff --git a/frontend/generate-config.js b/frontend/generate-config.js index 3746c8ab3..fa856dd7d 100644 --- a/frontend/generate-config.js +++ b/frontend/generate-config.js @@ -1,5 +1,5 @@ var fs = require('fs'); -const { execSync } = require('child_process'); +const { spawnSync } = require('child_process'); const CONFIG_FILE_NAME = 'mempool-frontend-config.json'; const GENERATED_CONFIG_FILE_NAME = 'generated-config.js'; @@ -12,15 +12,19 @@ let packetJsonVersion = ''; try { const rawConfig = fs.readFileSync(CONFIG_FILE_NAME); configContent = JSON.parse(rawConfig); + console.log(`${CONFIG_FILE_NAME} file found, using provided config`); } catch (e) { if (e.code !== 'ENOENT') { throw new Error(e); + } else { + console.log(`${CONFIG_FILE_NAME} file not found, using default config`); } } try { const packageJson = fs.readFileSync('package.json'); packetJsonVersion = JSON.parse(packageJson).version; + console.log(`mempool version ${packetJsonVersion}`); } catch (e) { throw new Error(e); } @@ -32,11 +36,23 @@ for (setting in configContent) { }); } -try { - const command = 'git rev-parse --short HEAD'; - gitCommitHash = execSync(command).toString('utf8').replace(/[\n\r\s]+$/, ''); -} catch (e) { - console.log('Could not load git commit info: ' + e.message || e); +if (process.env.DOCKER_COMMIT_HASH) { + gitCommitHash = process.env.DOCKER_COMMIT_HASH; +} else { + try { + const gitRevParse = spawnSync('git', ['rev-parse', '--short', 'HEAD']); + + if (!gitRevParse.error) { + gitCommitHash = gitRevParse.stdout.toString('utf-8').replace(/[\n\r\s]+$/, ''); + console.log(`mempool revision ${gitCommitHash}`); + } else if (gitRevParse.error.code === 'ENOENT') { + console.log('git not found, cannot parse git hash'); + gitCommitHash = '?'; + } + } catch (e) { + console.log('Could not load git commit info: ' + e.message); + gitCommitHash = '?'; + } } const newConfig = `(function (window) { @@ -46,18 +62,38 @@ const newConfig = `(function (window) { window.__env.PACKAGE_JSON_VERSION = '${packetJsonVersion}'; }(global || this));`; -try { - const currentConfig = fs.readFileSync(GENERATED_CONFIG_FILE_NAME).toString().trim(); - if (currentConfig === newConfig) { - console.log("Configuration not changed, skipping generation"); - } else { - try { - fs.writeFileSync(GENERATED_CONFIG_FILE_NAME, newConfig, 'utf8'); - console.log('Config file generated'); - } catch (e) { - throw new Error(e); - } +function readConfig(path) { + try { + const currentConfig = fs.readFileSync(path).toString().trim(); + return currentConfig; + } catch (e) { + return false; } -} catch (e) { - throw new Error(e); } + +function writeConfig(path, config) { + try { + fs.writeFileSync(path, config, 'utf8'); + } catch (e) { + throw new Error(e); + } +} + +const currentConfig = readConfig(GENERATED_CONFIG_FILE_NAME); + +if (currentConfig && currentConfig === newConfig) { + console.log(`No configuration updates, skipping ${GENERATED_CONFIG_FILE_NAME} file update`); + return; +} else if (!currentConfig) { + console.log(`${GENERATED_CONFIG_FILE_NAME} file not found, creating new config file`); + console.log('CONFIG: ', newConfig); + writeConfig(GENERATED_CONFIG_FILE_NAME, newConfig); + console.log(`${GENERATED_CONFIG_FILE_NAME} file saved`); + return; +} else { + console.log(`Configuration changes detected, updating ${GENERATED_CONFIG_FILE_NAME} file`); + console.log('OLD CONFIG: ', currentConfig); + console.log('NEW CONFIG: ', newConfig); + writeConfig(GENERATED_CONFIG_FILE_NAME, newConfig); + console.log(`${GENERATED_CONFIG_FILE_NAME} file updated`); +};