From 2eb17a1419ca5dd9c682b430e0091a352fd2c414 Mon Sep 17 00:00:00 2001 From: Ralf Vogler Date: Sun, 27 Aug 2023 18:33:27 +0200 Subject: [PATCH 1/8] docker: show version via $COMMIT_SHA (and $BRANCH if not "main") --- Dockerfile | 3 +++ docker-entrypoint.sh | 3 +++ 2 files changed, 6 insertions(+) diff --git a/Dockerfile b/Dockerfile index df20609..82bb263 100644 --- a/Dockerfile +++ b/Dockerfile @@ -70,6 +70,9 @@ LABEL org.opencontainers.image.title="free-games-claimer" \ org.opencontainers.image.base.name="ubuntu:jammy" \ org.opencontainers.image.version="latest" +ENV COMMIT_SHA=${COMMIT_SHA} +ENV BRANCH=${BRANCH} + # Configure VNC via environment variables: ENV VNC_PORT 5900 ENV NOVNC_PORT 6080 diff --git a/docker-entrypoint.sh b/docker-entrypoint.sh index 7796364..cfdac7e 100755 --- a/docker-entrypoint.sh +++ b/docker-entrypoint.sh @@ -2,6 +2,9 @@ set -eo pipefail # exit on error, error on any fail in pipe (not just last cmd); add -x to print each cmd; see gist bash_strict_mode.md +echo "Version: https://github.com/vogler/free-games-claimer/tree/${COMMIT_SHA}" +[ ! -z $BRANCH ] && [ $BRANCH != "main" ] && echo "Branch: ${BRANCH}" + # Remove chromium profile lock. # When running in docker and then killing it, on the next run chromium displayed a dialog to unlock the profile which made the script time out. # Maybe due to changed hostname of container or due to how the docker container kills playwright - didn't check. From 8a010dbcc7521837b784a6f18f1360bce355954b Mon Sep 17 00:00:00 2001 From: Ralf Vogler Date: Sun, 27 Aug 2023 23:32:56 +0200 Subject: [PATCH 2/8] docker: pass in build-args, add $NOW --- .github/workflows/docker.yml | 12 +++++++++++- Dockerfile | 12 ++++++++---- docker-entrypoint.sh | 3 ++- 3 files changed, 21 insertions(+), 6 deletions(-) diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 01781f8..8903c55 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -20,6 +20,11 @@ jobs: - name: Checkout uses: actions/checkout@v3 + - + name: Set environment variables + run: | + echo "BRANCH=${GITHUB_REF#refs/heads/}" >> $GITHUB_ENV + echo "NOW=$(date +'%Y-%m-%dT%H:%M:%S')" >> $GITHUB_ENV - name: Set up QEMU uses: docker/setup-qemu-action@v2 @@ -29,6 +34,7 @@ jobs: - name: Login to Docker Hub uses: docker/login-action@v2 + if: ${{ secrets.DOCKERHUB_USERNAME && secrets.DOCKERHUB_TOKEN }} with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} @@ -44,8 +50,12 @@ jobs: uses: docker/build-push-action@v4 with: context: . - platforms: linux/amd64,linux/arm64 # ,linux/arm/v7 push: true + build-args: | + COMMIT=${{ github.sha }} + BRANCH=${{ env.BRANCH }} + NOW=${{ env.NOW }} + platforms: linux/amd64,linux/arm64 # ,linux/arm/v7 tags: | voglerr/free-games-claimer:latest ghcr.io/vogler/free-games-claimer:latest diff --git a/Dockerfile b/Dockerfile index 82bb263..67a5e89 100644 --- a/Dockerfile +++ b/Dockerfile @@ -60,19 +60,23 @@ COPY . . RUN dos2unix *.sh && chmod +x *.sh COPY docker-entrypoint.sh /usr/local/bin/ +ARG COMMIT="" +ARG BRANCH="" +ARG NOW="" +ENV COMMIT=${COMMIT} +ENV BRANCH=${BRANCH} +ENV NOW=${NOW} + LABEL org.opencontainers.image.title="free-games-claimer" \ org.opencontainers.image.name="free-games-claimer" \ org.opencontainers.image.description="Automatically claims free games on the Epic Games Store, Amazon Prime Gaming and GOG" \ org.opencontainers.image.url="https://github.com/vogler/free-games-claimer" \ org.opencontainers.image.source="https://github.com/vogler/free-games-claimer" \ - org.opencontainers.image.revision=${COMMIT_SHA} \ + org.opencontainers.image.revision=${COMMIT} \ org.opencontainers.image.ref.name=${BRANCH} \ org.opencontainers.image.base.name="ubuntu:jammy" \ org.opencontainers.image.version="latest" -ENV COMMIT_SHA=${COMMIT_SHA} -ENV BRANCH=${BRANCH} - # Configure VNC via environment variables: ENV VNC_PORT 5900 ENV NOVNC_PORT 6080 diff --git a/docker-entrypoint.sh b/docker-entrypoint.sh index cfdac7e..2b5ddee 100755 --- a/docker-entrypoint.sh +++ b/docker-entrypoint.sh @@ -2,8 +2,9 @@ set -eo pipefail # exit on error, error on any fail in pipe (not just last cmd); add -x to print each cmd; see gist bash_strict_mode.md -echo "Version: https://github.com/vogler/free-games-claimer/tree/${COMMIT_SHA}" +echo "Version: https://github.com/vogler/free-games-claimer/tree/${COMMIT}" [ ! -z $BRANCH ] && [ $BRANCH != "main" ] && echo "Branch: ${BRANCH}" +echo "Build: $NOW" # Remove chromium profile lock. # When running in docker and then killing it, on the next run chromium displayed a dialog to unlock the profile which made the script time out. From d7949fb9dd4c696116e056c6930adceb059d7839 Mon Sep 17 00:00:00 2001 From: Ralf Vogler Date: Sun, 27 Aug 2023 23:39:52 +0200 Subject: [PATCH 3/8] can't use secrets in if of workflow step? --- .github/workflows/docker.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 8903c55..4b4c78e 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -34,7 +34,7 @@ jobs: - name: Login to Docker Hub uses: docker/login-action@v2 - if: ${{ secrets.DOCKERHUB_USERNAME && secrets.DOCKERHUB_TOKEN }} + # if: ${{ secrets.DOCKERHUB_USERNAME && secrets.DOCKERHUB_TOKEN }} with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} From f528fbfd305218ae59bb3b15b4f45ac9e705ff3e Mon Sep 17 00:00:00 2001 From: Ralf Vogler Date: Sun, 27 Aug 2023 23:41:19 +0200 Subject: [PATCH 4/8] docker: more human-readable format for date $NOW --- .github/workflows/docker.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 4b4c78e..2459dcd 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -24,7 +24,7 @@ jobs: name: Set environment variables run: | echo "BRANCH=${GITHUB_REF#refs/heads/}" >> $GITHUB_ENV - echo "NOW=$(date +'%Y-%m-%dT%H:%M:%S')" >> $GITHUB_ENV + echo "NOW=$(date -R)" >> $GITHUB_ENV # date -Iseconds; date +'%Y-%m-%dT%H:%M:%S' - name: Set up QEMU uses: docker/setup-qemu-action@v2 From c211472d0c59337545f1c5a91b5aeb5d2fd022df Mon Sep 17 00:00:00 2001 From: Ralf Vogler Date: Sun, 27 Aug 2023 23:59:30 +0200 Subject: [PATCH 5/8] docker: try GitHub Actions cache https://docs.docker.com/build/ci/github-actions/cache/#github-cache --- .github/workflows/docker.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 2459dcd..bf7fc06 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -59,3 +59,5 @@ jobs: tags: | voglerr/free-games-claimer:latest ghcr.io/vogler/free-games-claimer:latest + cache-from: type=gha + cache-to: type=gha,mode=max From d4d7ee32819013949e5b1a95f5179cd8a7f9fb77 Mon Sep 17 00:00:00 2001 From: Ralf Vogler Date: Mon, 28 Aug 2023 00:47:52 +0200 Subject: [PATCH 6/8] fix indent --- util.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/util.js b/util.js index 8cc91e9..0b2dcbe 100644 --- a/util.js +++ b/util.js @@ -108,11 +108,11 @@ export const notify = (html) => new Promise((resolve, reject) => { const title = cfg.notify_title ? `-t ${cfg.notify_title}` : ''; exec(`apprise ${cfg.notify} -i html '${title}' -b '${html}'`, (error, stdout, stderr) => { if (error) { - console.log(`error: ${error.message}`); - if (error.message.includes('command not found')) { - console.info('Run `pip install apprise`. See https://github.com/vogler/free-games-claimer#notifications'); - } - return resolve(); + console.log(`error: ${error.message}`); + if (error.message.includes('command not found')) { + console.info('Run `pip install apprise`. See https://github.com/vogler/free-games-claimer#notifications'); + } + return resolve(); } if (stderr) console.error(`stderr: ${stderr}`); if (stdout) console.log(`stdout: ${stdout}`); From 6560afa2b5c48e659836b4040a4b9e5f7914b072 Mon Sep 17 00:00:00 2001 From: Ralf Vogler Date: Mon, 28 Aug 2023 01:17:57 +0200 Subject: [PATCH 7/8] version.js to check if running the latest version --- version.js | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 version.js diff --git a/version.js b/version.js new file mode 100644 index 0000000..170ed42 --- /dev/null +++ b/version.js @@ -0,0 +1,49 @@ +// check if running the latest version + +import {log} from 'console'; +import { existsSync, readFileSync } from 'fs'; +import { exec } from 'child_process'; + +const execp = (cmd) => new Promise((resolve, reject) => { + exec(cmd, (error, stdout, stderr) => { + if (stderr) console.error(`stderr: ${stderr}`); + // if (stdout) console.log(`stdout: ${stdout}`); + if (error) { + console.log(`error: ${error.message}`); + if (error.message.includes('command not found')) { + console.info('Install git to check for updates!'); + } + return reject(); + } + resolve(stdout.trim()); + }); +}); + +const git_main = () => readFileSync('.git/refs/heads/main').toString().trim(); + +let sha, date; +if (existsSync('/.dockerenv')) { + log('Running inside Docker.'); + ['COMMIT', 'BRANCH', 'NOW'].forEach(v => log(` ${v}:`, process.env[v])); + sha = process.env.COMMIT; + date = process.env.NOW; +} else { + log('Not running inside Docker.'); + sha = await execp('git rev-parse HEAD'); + date = await execp('git show -s --format=%cD'); // same as format as `date -R` (RFC2822) + // date = await execp('git show -s --format=%ch'); // %ch is same as --date=human (short/relative) +} + +const gh = await (await fetch('https://api.github.com/repos/vogler/free-games-claimer/commits/main', { + // headers: { accept: 'application/vnd.github.VERSION.sha' } + })).json(); +// log(gh); + +log('Local commit:', sha, new Date(date)); +log('Online commit:', gh.sha, new Date(gh.commit.committer.date)); + +if (sha == gh.sha) { + log('Running the latest version!') +} else { + log('Not running the latest version!') +} From 9261be690ce0aaa744a3106628b0579a1363fdbf Mon Sep 17 00:00:00 2001 From: Ralf Vogler Date: Mon, 28 Aug 2023 01:25:09 +0200 Subject: [PATCH 8/8] '/.dockerenv' did not exist in container... --- version.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/version.js b/version.js index 170ed42..7b9ebef 100644 --- a/version.js +++ b/version.js @@ -1,7 +1,7 @@ // check if running the latest version import {log} from 'console'; -import { existsSync, readFileSync } from 'fs'; +import { readFileSync } from 'fs'; import { exec } from 'child_process'; const execp = (cmd) => new Promise((resolve, reject) => { @@ -22,7 +22,8 @@ const execp = (cmd) => new Promise((resolve, reject) => { const git_main = () => readFileSync('.git/refs/heads/main').toString().trim(); let sha, date; -if (existsSync('/.dockerenv')) { +// if (existsSync('/.dockerenv')) { // did not work +if (process.env.NOVNC_PORT) { log('Running inside Docker.'); ['COMMIT', 'BRANCH', 'NOW'].forEach(v => log(` ${v}:`, process.env[v])); sha = process.env.COMMIT;