Skip to content

Pin third-party actions by SHA, add Dependabot, serialize builds, update deprecated node runtimes - #34

Open
LunkSnee wants to merge 2 commits into
snorre-k:mainfrom
LunkSnee:ci/pin-actions-dependabot
Open

Pin third-party actions by SHA, add Dependabot, serialize builds, update deprecated node runtimes#34
LunkSnee wants to merge 2 commits into
snorre-k:mainfrom
LunkSnee:ci/pin-actions-dependabot

Conversation

@LunkSnee

@LunkSnee LunkSnee commented Aug 3, 2026

Copy link
Copy Markdown

No description provided.

claude added 2 commits July 30, 2026 16:39
Three actions still declared runtimes GitHub has deprecated, which
produces warnings on every run:

  tyriis/docker-image-tag-exists   v2.1.0 -> v2026.6.0  (was node20)
  actions/checkout                 v3     -> v6.0.2     (was node16)
  peter-evans/dockerhub-description v2    -> v5.0.0     (was node12)

Inputs and outputs are unchanged for all three as used here:
docker-image-tag-exists keeps the same registry/repository/tag inputs and
the same `found` / `not found` output, and dockerhub-description v5 is a
superset of v2's inputs. No step logic needed changing.

Versions use the same exact-pin style already used elsewhere in
build-and-publish.yml.
The three third-party actions run in jobs holding DOCKERHUB_TOKEN and
GITHUB_TOKEN. A mutable tag can be repointed by its owner, so they are
pinned by full commit SHA. Actions from actions/* and docker/* are left
on version tags deliberately — pinning those trades away automatic
security patches for less benefit.

SHA pins never roll forward on their own, so .github/dependabot.yml adds
weekly checks for both workflows and the Dockerfile base image.
cooldown.default-days: 5 holds a release back until it has been public
for five days rather than adopting it the day it ships; security updates
bypass cooldown. The trailing "# vX.Y.Z" comments are the form Dependabot
reads and rewrites when it bumps a SHA.

Adds a concurrency group so a manual dispatch overlapping the daily
schedule cannot race to push :latest, with the slower run winning.

.gitignore was a Flash/ActionScript template (*.swf, *.air, *.ipa, Flash
Builder project files) with nothing relevant to this project; replaced
with compose overrides, .env, local container data and editor noise.
Verified no currently tracked file becomes ignored.
@snorre-k

snorre-k commented Aug 3, 2026

Copy link
Copy Markdown
Owner

I do not understand, what these changes do.
Could you explain a little bit?

@LunkSnee

LunkSnee commented Aug 8, 2026

Copy link
Copy Markdown
Author

Happy to explain — sorry, my description was too technical. Here is what each
part does and why.

1. Pinning three actions to a commit ID

Right now the workflow says things like:

uses: tyriis/docker-image-tag-exists@v2.1.0

v2.1.0 is just a label. The person who owns that action can move that label
to point at different code at any time. If their account were ever taken over,
the new code would run in your workflow automatically.

That matters for these three steps in particular, because the job they run in
has access to your DOCKERHUB_TOKEN and the GitHub token.

So I changed them to the commit ID instead:

uses: tyriis/docker-image-tag-exists@e73c8fd... # v2026.6.0

A commit ID cannot be moved. It always means exactly that code. The
# v2026.6.0 comment is just so you can still read which version it is.

I only did this for the three actions from individual developers. I left
actions/checkout and the docker/* actions on normal version tags, because
those are maintained by GitHub and Docker themselves, and pinning them would
mean you stop receiving their fixes automatically.

2. Adding Dependabot

The downside of a commit ID is that it never updates by itself, so nobody
notices when a new version is released.

Dependabot is GitHub's built-in bot. Once a week it checks the actions and the
Dockerfile base image. If something newer exists, it opens a small pull request
for you. You just merge it or close it — nothing is installed automatically,
and nothing changes without your approval.

When it updates a commit ID, it also updates the # v2026.6.0 comment, so the
two stay in sync.

3. The 5-day "cooldown" in the Dependabot config

This tells Dependabot to wait 5 days after a release before offering it to you.

The idea: if a new version turns out to be broken and the author fixes it
quickly, you never see the broken one. Security fixes are excluded from the
wait — those are always offered immediately.

You can change default-days: 5 to any number you prefer, or remove it.

4. The concurrency block

Today, if the daily scheduled build is running and you also start a build
manually, both run at the same time and both push the :latest tag. Whichever
one finishes last overwrites the other — which could be the older build.

The concurrency block makes the second build wait for the first to finish
instead of running alongside it.

5. The .gitignore change

The current .gitignore appears to come from a Flash / ActionScript project
template — it ignores *.swf, *.ipa, *.apk and Flash Builder project
files. None of that applies to this project.

I replaced it with entries that do apply here (compose override files, .env,
local container data, editor files). This has no effect on the build at all. I
checked that no file currently in the repository becomes ignored.

This one is purely cosmetic — happy to drop it if you'd rather leave it alone.


If it is easier to review, I am glad to split this into separate smaller pull
requests, or drop any part you do not want.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants