diff --git a/free_games_claimer/CHANGELOG.md b/free_games_claimer/CHANGELOG.md index 03e069e080..37ed3784b6 100644 --- a/free_games_claimer/CHANGELOG.md +++ b/free_games_claimer/CHANGELOG.md @@ -1,3 +1,28 @@ +## 2.1.0 (2026-08-24) + +- Updated the pinned upstream from Free Games Claimer Remaster 1.1 to 1.6, + which adds the Ubisoft giveaway, Fab, AliExpress and Epic mobile stores, + fixed daily scheduler times, the `VNC_URL` notification link override, and a + fix for the `--accept-lang` flag that made every store's browser detectable + as automated. +- Mirrored upstream's Chromium hardening: `xdg-open` is neutralised and an + `AutoLaunchProtocolsFromOrigins` policy is installed, so app-scheme links + cannot open a blocking dialog in the VNC session. +- Disabled upstream's release-update notification by default. It tells the user + to run `docker compose pull`, while the add-on is updated through the Home + Assistant add-on store. Set `NOTIFY_UPDATES=true` in `config.env` to receive + it anyway. +- Reworded the add-on description so the store list reads as partial rather + than exhaustive; the full list is in the README. +- The default store selection is unchanged: existing installations keep + claiming from Epic, Prime Gaming and GOG until `STORES` is edited. +- Replaced the pinned upstream commit with `ARG BUILD_UPSTREAM`, which names an + upstream release tag, and re-enabled the repository updater for this add-on. + Upstream releases are now picked up automatically instead of requiring a + manual commit pin. Upstream's development tags are excluded: `lastversion` + reports the `v1.7d` development tag as release `1.7`, for which no source + archive exists, so an unfiltered update would have broken the build. + ## 2.0.1 (2026-07-17) - Aligned the pull-request build context with the production builder by copying diff --git a/free_games_claimer/Dockerfile b/free_games_claimer/Dockerfile index f35c71a8d7..eb63c745b7 100644 --- a/free_games_claimer/Dockerfile +++ b/free_games_claimer/Dockerfile @@ -17,7 +17,7 @@ ARG BUILD_REF ARG BUILD_REPOSITORY ARG BUILD_VERSION ARG UPSTREAM_REPOSITORY="P-Adamiec/Free-Games-Claimer-Remaster" -ARG UPSTREAM_REF="cca4992354215cef8807b748575af797606627f4" +ARG BUILD_UPSTREAM="1.6" ENV S6_CMD_WAIT_FOR_SERVICES="1" \ S6_CMD_WAIT_FOR_SERVICES_MAXTIME="0" \ @@ -27,10 +27,7 @@ ENV S6_CMD_WAIT_FOR_SERVICES="1" \ WIDTH="1280" \ HEIGHT="720" \ DEPTH="24" \ - SHOW="1" \ - COMMIT="${UPSTREAM_REF}" \ - BRANCH="main" \ - NOW="${BUILD_DATE}" + SHOW="1" # Install the dependencies used by Free Games Claimer Remaster. The upstream # Dockerfile supports both amd64 (Google Chrome) and arm64 (Chromium), so the @@ -87,6 +84,11 @@ RUN apt-get update \ else \ apt-get install -y --no-install-recommends chromium; \ fi \ + && printf '#!/bin/sh\nexit 0\n' > /usr/bin/xdg-open \ + && chmod +x /usr/bin/xdg-open \ + && mkdir -p /etc/opt/chrome/policies/managed /etc/chromium/policies/managed \ + && printf '%s\n' '{"AutoLaunchProtocolsFromOrigins":[{"protocol":"aliexpress","allowed_origins":["*"]},{"protocol":"aliexpresshd","allowed_origins":["*"]},{"protocol":"aecmd","allowed_origins":["*"]},{"protocol":"alibaba","allowed_origins":["*"]},{"protocol":"alipay","allowed_origins":["*"]},{"protocol":"alipays","allowed_origins":["*"]},{"protocol":"tmall","allowed_origins":["*"]},{"protocol":"taobao","allowed_origins":["*"]},{"protocol":"market","allowed_origins":["*"]},{"protocol":"intent","allowed_origins":["*"]}]}' \ + | tee /etc/opt/chrome/policies/managed/fgc-autolaunch.json /etc/chromium/policies/managed/fgc-autolaunch.json > /dev/null \ && ln -sf /usr/share/novnc/vnc_auto.html /usr/share/novnc/index.html \ && ln -sf /usr/bin/python3 /usr/bin/python \ && apt-get purge -y gnupg \ @@ -94,13 +96,20 @@ RUN apt-get update \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* /var/cache/* /var/tmp/* /tmp/* /usr/share/doc/* -# Install a deterministic snapshot of the replacement upstream. Updating the -# upstream reference is intentionally explicit so image contents cannot change -# without an add-on version bump. +# Install the upstream release named by BUILD_UPSTREAM. The repository updater +# bumps that value together with the add-on version. A release tag is a mutable +# reference: rebuilding the same BUILD_UPSTREAM installs whatever the tag points +# at today, which is the accepted cost of tracking upstream automatically. +# Upstream tags its releases "v1.6", but the tag name is downloaded without the +# prefix as well so that an unattended update does not fail the build if +# upstream ever drops it. WORKDIR /fgc -RUN curl --proto "=https" --tlsv1.2 -fsSL \ - "https://github.com/${UPSTREAM_REPOSITORY}/archive/${UPSTREAM_REF}.tar.gz" \ +RUN (curl --proto "=https" --tlsv1.2 -fsSL \ + "https://github.com/${UPSTREAM_REPOSITORY}/archive/v${BUILD_UPSTREAM}.tar.gz" \ -o /tmp/free-games-claimer-remaster.tar.gz \ + || curl --proto "=https" --tlsv1.2 -fsSL \ + "https://github.com/${UPSTREAM_REPOSITORY}/archive/${BUILD_UPSTREAM}.tar.gz" \ + -o /tmp/free-games-claimer-remaster.tar.gz) \ && tar -xzf /tmp/free-games-claimer-remaster.tar.gz --strip-components=1 -C /fgc \ && python3 -m pip install --no-cache-dir --break-system-packages -r requirements.txt \ && dos2unix ./*.sh \ @@ -155,4 +164,4 @@ LABEL \ org.opencontainers.image.created="${BUILD_DATE}" \ org.opencontainers.image.revision="${BUILD_REF}" \ org.opencontainers.image.version="${BUILD_VERSION}" \ - io.hass.upstream="https://github.com/${UPSTREAM_REPOSITORY}/tree/${UPSTREAM_REF}" + io.hass.upstream="https://github.com/${UPSTREAM_REPOSITORY}/releases" diff --git a/free_games_claimer/README.md b/free_games_claimer/README.md index e12eea312f..a26163e5d2 100644 --- a/free_games_claimer/README.md +++ b/free_games_claimer/README.md @@ -24,14 +24,19 @@ This add-on is based on [Free Games Claimer Remaster](https://github.com/P-Adamiec/Free-Games-Claimer-Remaster). It can claim free games from: -- Epic Games Store +- Epic Games Store, including its weekly free mobile game +- Fab, Epic's asset marketplace (`fab`) - Amazon Prime Gaming - GOG - Steam +- Ubisoft giveaways (`ubisoft`) +- AliExpress daily coin check-in (`aliexpress`) - GamerPower-supported stores, when explicitly enabled For compatibility with previous add-on releases, the default store selection -remains Epic Games, Prime Gaming, and GOG. +remains Epic Games, Prime Gaming, and GOG. The other stores are enabled by +adding them to `STORES`, for example `epic,prime,gog,fab,ubisoft`, and each +needs its own credentials in `config.env`. ## Web interface @@ -98,6 +103,11 @@ NOTIFY=tgram://bot-token/chat-id # DISCORD_WEBHOOK=https://discord.com/api/webhooks/... ``` +Upstream's release-update notification (`NOTIFY_UPDATES`) is disabled by the +add-on, because it advises running `docker compose pull` while the add-on is +actually updated through the Home Assistant add-on store. Setting +`NOTIFY_UPDATES=true` in `config.env` re-enables it. + Existing variables such as `EG_EMAIL`, `EG_PASSWORD`, `PG_EMAIL`, `PG_PASSWORD`, `PG_OTPKEY`, `GOG_EMAIL`, `GOG_PASSWORD`, `SHOW`, `WIDTH`, `HEIGHT`, `TIMEOUT`, `LOGIN_TIMEOUT`, `DRYRUN`, and `NOTIFY` remain compatible. @@ -132,16 +142,31 @@ normally uses port `7080`. ## Upstream update policy -The image is built from an explicit upstream commit in the Dockerfile. This -keeps amd64 and aarch64 images reproducible and prevents an upstream branch or -container tag from changing without an add-on review and version bump. +The image is built from the upstream release named by `ARG BUILD_UPSTREAM` in +the Dockerfile, downloaded as the matching `v` source tarball. The +repository updater tracks upstream releases and bumps that value, the add-on +version and `CHANGELOG.md` together, so a new upstream release reaches the +add-on without a manual edit. -The repository updater is intentionally paused for this add-on because the -add-on uses its own `2.x` version series while the replacement upstream uses a -`1.x` version series. An automatic replacement would risk a Home Assistant -version regression and would not safely update the pinned commit. A maintainer -upstream update must therefore update `UPSTREAM_REF`, `upstream_version`, the -add-on version, and `CHANGELOG.md` together. +A release tag is a mutable reference. Rebuilding the same `BUILD_UPSTREAM` +installs whatever that tag points at, so an upstream tag that is force-moved or +deleted would change or fail the build without an add-on change. That is the +accepted cost of automatic tracking, and it is the same trade-off every other +automatically updated add-on in this repository makes; the previous commit pin +was immutable but could only be advanced by hand. + +Upstream's development tags (`v1.7d` and similar) are filtered out through +`"github_exclude": "d"` in `updater.json`. Without it the updater reports the +`v1.7d` tag as release `1.7`, for which GitHub serves no source archive, and +the build would fail. + +The add-on version does not track the upstream version. The add-on uses a `2.x` +series while upstream is on `1.x`, and Home Assistant only offers an update +when the new version sorts strictly higher, so the updater increments the +add-on version (`2.1.0` to `2.1.1`) instead of publishing a lower-sorting +upstream number. The upstream release actually installed is recorded in +`upstream_version` in `updater.json`, in `CHANGELOG.md`, and in the add-on's +startup banner. ## Installation diff --git a/free_games_claimer/config.yaml b/free_games_claimer/config.yaml index 69e1f0c7cc..074f167f49 100644 --- a/free_games_claimer/config.yaml +++ b/free_games_claimer/config.yaml @@ -2,7 +2,7 @@ arch: - aarch64 - amd64 -description: "Automatically claims free games from Epic Games Store, Amazon Prime Gaming, GOG, Steam, and optional GamerPower-supported stores" +description: "Claims free games from Epic, Prime, GOG, Steam, Ubisoft and more" devices: - /dev/dri - /dev/dri/card0 @@ -96,5 +96,5 @@ schema: slug: free_games_claimer udev: true url: https://github.com/alexbelgium/hassio-addons -version: "2.0.1" +version: "2.1.0" webui: "[PROTO:ssl]://[HOST]:[PORT:6080]" diff --git a/free_games_claimer/rootfs/etc/cont-init.d/99-run.sh b/free_games_claimer/rootfs/etc/cont-init.d/99-run.sh index e1cf0aa3dc..7dac64162d 100755 --- a/free_games_claimer/rootfs/etc/cont-init.d/99-run.sh +++ b/free_games_claimer/rootfs/etc/cont-init.d/99-run.sh @@ -36,6 +36,12 @@ set -a source "${RUNTIME_CONFIG}" set +a +# Upstream checks GitHub for newer releases and then tells the user to run +# "docker compose pull", which is wrong here: the add-on is updated through the +# Home Assistant add-on store. Default the check off, but honour an explicit +# NOTIFY_UPDATES from config.env. +export NOTIFY_UPDATES="${NOTIFY_UPDATES:-false}" + # The Home Assistant port mapping is intentionally kept at 6080 for a seamless # upgrade from the previous add-on, even though the new upstream defaults to 7080. if [ -n "${NOVNC_PORT:-}" ] && [ "${NOVNC_PORT}" != "6080" ]; then diff --git a/free_games_claimer/rootfs/templates/config.env b/free_games_claimer/rootfs/templates/config.env index eef9136db2..39a538959b 100644 --- a/free_games_claimer/rootfs/templates/config.env +++ b/free_games_claimer/rootfs/templates/config.env @@ -10,12 +10,17 @@ TIMEOUT=60 LOGIN_TIMEOUT=180 VNC_LOGIN_TIMEOUT=180 NOVNC_PORT=6080 +# Public address used in notification links when behind a reverse proxy. +# VNC_URL=https://fgc.example.tld -# Keep the previous add-on's default stores. Add steam or gamerpower if wanted. +# Keep the previous add-on's default stores. The upstream also supports +# steam, fab, ubisoft, aliexpress and gamerpower; add them here if wanted. STORES=epic,prime,gog # Used only when RUN_ONCE is disabled in the add-on options. SCHEDULER_HOURS=12 +# SCHEDULER_TIMEZONE=UTC +# SCHEDULER_FIXED_TIMES=17:00,21:30 # Common credentials can be used as fallbacks for all stores. # EMAIL= @@ -33,7 +38,27 @@ SCHEDULER_HOURS=12 # GOG_PASSWORD= # STEAM_USERNAME= # STEAM_PASSWORD= +# UBI_EMAIL= +# UBI_PASSWORD= +# UBI_OTPKEY= +# AE_EMAIL= +# AE_PASSWORD= + +# Epic's weekly free mobile game, claimed with the epic store. +# EG_MOBILE=true +# EG_MOBILE_PLATFORMS=android,ios + +# Fab assets sign in with the Epic account. Accepting the licence agreement is +# required to claim; set to false to be notified instead of accepting. +# FAB_ACCEPT_EULA=true # Notifications (Apprise or Discord) # NOTIFY= # DISCORD_WEBHOOK= +# NOTIFY_ALREADY_CLAIMED=false +# NOTIFY_SKIP_STORES= + +# Upstream release notifications are disabled by the add-on: updates are +# delivered through the Home Assistant add-on store, not by docker compose. +# Set to true to receive them anyway. +# NOTIFY_UPDATES=false diff --git a/free_games_claimer/updater.json b/free_games_claimer/updater.json index fe2dd30949..7d34690fd8 100644 --- a/free_games_claimer/updater.json +++ b/free_games_claimer/updater.json @@ -1,11 +1,13 @@ { "dockerhub_by_date": false, "dockerhub_list_size": 2, - "last_update": "17-07-2026", - "paused": true, + "github_exclude": "d", + "github_fulltag": false, + "last_update": "24-08-2026", + "paused": false, "repository": "alexbelgium/hassio-addons", "slug": "free_games_claimer", "source": "github", "upstream_repo": "P-Adamiec/Free-Games-Claimer-Remaster", - "upstream_version": "1.1" + "upstream_version": "1.6" }