Remco van Bree
banner
blikkie.hachyderm.io.ap.brid.gy
Remco van Bree
@blikkie.hachyderm.io.ap.brid.gy
Dutchman in New York. Dad, nerd, Software Engineer in Test, rock climber, occasional chef. I can talk about biking around and liveable cities all day. Ex-JW Player […]

[bridged from https://hachyderm.io/@blikkie on the fediverse by https://fed.brid.gy/ ]
Reposted by Remco van Bree
GitHub Actions charging per build minute for *self-hosted-runners*? Shit's about to hit the fan lol
December 16, 2025 at 5:57 PM
Reposted by Remco van Bree
The package manager in GitHub Actions might be the worst package manager in use today: https://nesbitt.io/2025/12/06/github-actions-package-manager.html
GitHub Actions Has a Package Manager, and It Might Be the Worst
After putting together ecosyste-ms/package-manager-resolvers, I started wondering what dependency resolution algorithm GitHub Actions uses. When you write `uses: actions/checkout@v4` in a workflow file, you’re declaring a dependency. GitHub resolves it, downloads it, and executes it. That’s package management. So I went spelunking into the runner codebase to see how it works. What I found was concerning. Package managers are a critical part of software supply chain security. The industry has spent years hardening them after incidents like left-pad, event-stream, and countless others. Lockfiles, integrity hashes, and dependency visibility aren’t optional extras. They’re the baseline. GitHub Actions ignores all of it. Compared to mature package ecosystems: Feature | npm | Cargo | NuGet | Bundler | Go | Actions ---|---|---|---|---|---|--- Lockfile | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ Transitive pinning | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ Integrity hashes | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ Dependency tree visibility | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ Resolution specification | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ The core problem is the lack of a lockfile. Every other package manager figured this out decades ago: you declare loose constraints in a manifest, the resolver picks specific versions, and the lockfile records exactly what was chosen. GitHub Actions has no equivalent. Every run re-resolves from your workflow file, and the results can change without any modification to your code. Research from USENIX Security 2022 analyzed over 200,000 repositories and found that 99.7% execute externally developed Actions, 97% use Actions from unverified creators, and 18% run Actions with missing security updates. The researchers identified four fundamental security properties that CI/CD systems need: admittance control, execution control, code control, and access to secrets. GitHub Actions fails to provide adequate tooling for any of them. A follow-up study using static taint analysis found code injection vulnerabilities in over 4,300 workflows across 2.7 million analyzed. Nearly every GitHub Actions user is running third-party code with no verification, no lockfile, and no visibility into what that code depends on. **Mutable versions.** When you pin to `actions/checkout@v4`, that tag can move. The maintainer can push a new commit and retag. Your workflow changes silently. A lockfile would record the SHA that `@v4` resolved to, giving you reproducibility while keeping version tags readable. Instead, you have to choose: readable tags with no stability, or unreadable SHAs with no automated update path. GitHub has added mitigations. Immutable releases lock a release’s git tag after publication. Organizations can enforce SHA pinning as a policy. You can limit workflows to actions from verified creators. These help, but they only address the top-level dependency. They do nothing for transitive dependencies, which is the primary attack vector. **Invisible transitive dependencies.** SHA pinning doesn’t solve this. Composite actions resolve their own dependencies, but you can’t see or control what they pull in. When you pin an action to a SHA, you only lock the outer file. If it internally pulls `some-helper@v1` with a mutable tag, your workflow is still vulnerable. You have zero visibility into this. A lockfile would record the entire resolved tree, making transitive dependencies visible and pinnable. Research on JavaScript Actions found that 54% contain at least one security weakness, with most vulnerabilities coming from indirect dependencies. The tj-actions/changed-files incident showed how this plays out in practice: a compromised action updated its transitive dependencies to exfiltrate secrets. With a lockfile, the unexpected transitive change would have been visible in a diff. **No integrity verification.** npm records `integrity` hashes in the lockfile. Cargo records checksums in `Cargo.lock`. When you install, the package manager verifies the download matches what was recorded. Actions has nothing. You trust GitHub to give you the right code for a SHA. A lockfile with integrity hashes would let you verify that what you’re running matches what you resolved. **Re-runs aren’t reproducible.** GitHub staff have confirmed this explicitly: “if the workflow uses some actions at a version, if that version was force pushed/updated, we will be fetching the latest version there.” A failed job re-run can silently get different code than the original run. Cache interaction makes it worse: caches only save on successful jobs, so a re-run after a force-push gets different code _and_ has to rebuild the cache. Two sources of non-determinism compounding. A lockfile would make re-runs deterministic: same lockfile, same code, every time. **No dependency tree visibility.** npm has `npm ls`. Cargo has `cargo tree`. You can inspect your full dependency graph, find duplicates, trace how a transitive dependency got pulled in. Actions gives you nothing. You can’t see what your workflow actually depends on without manually reading every composite action’s source. A lockfile would be a complete manifest of your dependency tree. **Undocumented resolution semantics.** Every package manager documents how dependency resolution works. npm has a spec. Cargo has a spec. Actions resolution is undocumented. The runner source is public, and the entire “resolution algorithm” is in ActionManager.cs. Here’s a simplified version of what it does: // Simplified from actions/runner ActionManager.cs async Task PrepareActionsAsync(steps) { // Start fresh every time - no caching DeleteDirectory("_work/_actions"); await PrepareActionsRecursiveAsync(steps, depth: 0); } async Task PrepareActionsRecursiveAsync(actions, depth) { if (depth > 10) throw new Exception("Composite action depth exceeded max depth 10"); foreach (var action in actions) { // Resolution happens on GitHub's server - opaque to us var downloadInfo = await GetDownloadInfoFromGitHub(action.Reference); // Download and extract - no integrity verification var tarball = await Download(downloadInfo.TarballUrl); Extract(tarball, $"_actions/{action.Owner}/{action.Repo}/{downloadInfo.Sha}"); // If composite, recurse into its dependencies var actionYml = Parse($"_actions/{action.Owner}/{action.Repo}/{downloadInfo.Sha}/action.yml"); if (actionYml.Type == "composite") { // These nested actions may use mutable tags - we have no control await PrepareActionsRecursiveAsync(actionYml.Steps, depth + 1); } } } That’s it. No version constraints, no deduplication (the same action referenced twice gets downloaded twice), no integrity checks. The tarball URL comes from GitHub’s API, and you trust them to return the right content for the SHA. A lockfile wouldn’t fix the missing spec, but it would at least give you a concrete record of what resolution produced. Even setting lockfiles aside, Actions has other issues that proper package managers solved long ago. **No registry.** Actions live in git repositories. There’s no central index, no security scanning, no malware detection, no typosquatting prevention. A real registry can flag malicious packages, store immutable copies independent of the source, and provide a single point for security response. The Marketplace exists but it’s a thin layer over repository search. Without a registry, there’s nowhere for immutable metadata to live. If an action’s source repository disappears or gets compromised, there’s no fallback. **Shared mutable environment.** Actions aren’t sandboxed from each other. Two actions calling `setup-node` with different versions mutate the same `$PATH`. The outcome depends on execution order, not any deterministic resolution. **No offline support.** Actions are pulled from GitHub on every run. There’s no offline installation mode, no vendoring mechanism, no way to run without network access. Other package managers let you vendor dependencies or set up private mirrors. With Actions, if GitHub is down, your CI is down. **The namespace is GitHub usernames.** Anyone who creates a GitHub account owns that namespace for actions. Account takeovers and typosquatting are possible. When a popular action maintainer’s account gets compromised, attackers can push malicious code and retag. A lockfile with integrity hashes wouldn’t prevent account takeovers, but it would detect when the code changes unexpectedly. The hash mismatch would fail the build instead of silently running attacker-controlled code. Another option would be something like Go’s checksum database, a transparent log of known-good hashes that catches when the same version suddenly has different contents. ### How Did We Get Here? The Actions runner is forked from Azure DevOps, designed for enterprises with controlled internal task libraries where you trust your pipeline tasks. GitHub bolted a public marketplace onto that foundation without rethinking the trust model. The addition of composite actions and reusable workflows created a dependency system, but the implementation ignored lessons from package management: lockfiles, integrity verification, transitive pinning, dependency visibility. This matters beyond CI/CD. Trusted publishing is being rolled out across package registries: PyPI, npm, RubyGems, and others now let you publish packages directly from GitHub Actions using OIDC tokens instead of long-lived secrets. OIDC removes one class of attacks (stolen credentials) but amplifies another: the supply chain security of these registries now depends entirely on GitHub Actions, a system that lacks the lockfile and integrity controls these registries themselves require. A compromise in your workflow’s action dependencies can lead to malicious packages on registries with better security practices than the system they’re trusting to publish. Other CI systems have done better. GitLab CI added an `integrity` keyword in version 17.9 that lets you specify a SHA256 hash for remote includes. If the hash doesn’t match, the pipeline fails. Their documentation explicitly warns that including remote configs “is similar to pulling a third-party dependency” and recommends pinning to full commit SHAs. GitLab recognized the problem and shipped integrity verification. GitHub closed the feature request. GitHub’s design choices don’t just affect GitHub users. Forgejo Actions maintains compatibility with GitHub Actions, which means projects migrating to Codeberg for ethical reasons inherit the same broken CI architecture. The Forgejo maintainers openly acknowledge the problems, with contributors calling GitHub Actions’ ecosystem “terribly designed and executed.” But they’re stuck maintaining compatibility with it. Codeberg mirrors common actions to reduce GitHub dependency, but the fundamental issues are baked into the model itself. GitHub’s design flaws are spreading to the alternatives. GitHub issue #2195 requested lockfile support. It was closed as “not planned” in 2022. Palo Alto’s “Unpinnable Actions” research documented how even SHA-pinned actions can have unpinnable transitive dependencies. Dependabot can update action versions, which helps. Some teams vendor actions into their own repos. zizmor is excellent at scanning workflows and finding security issues. But these are workarounds for a system that lacks the basics. The fix is a lockfile. Record resolved SHAs for every action reference, including transitives. Add integrity hashes. Make the dependency tree inspectable. GitHub closed the request three years ago and hasn’t revisited it. * * * **Further reading:** * Characterizing the Security of GitHub CI Workflows - Koishybayev et al., USENIX Security 2022 * ARGUS: A Framework for Staged Static Taint Analysis of GitHub Workflows and Actions - Muralee et al., USENIX Security 2023 * New GitHub Action supply chain attack: reviewdog/action-setup - Wiz Research, 2025 * Unpinnable Actions: How Malicious Code Can Sneak into Your GitHub Actions Workflows * GitHub Actions Worm: Compromising GitHub Repositories Through the Actions Dependency Tree * setup-python: Action can be compromised via mutable dependency
nesbitt.io
December 6, 2025 at 1:21 PM
Reposted by Remco van Bree
Some people just want to see the world burn 🔥

#rust #golang #eMacs #vim #python
November 13, 2025 at 7:58 AM
Reposted by Remco van Bree
This is a scorching article on the absolute state of The New York Times, and much of the rest of the media.
Not just the billionaire media, note, but also the billionaire-*compliant* media, which both-sides every issue with purchased junktank talking points.
lithub.com/maybe-dont-t...
Maybe Don’t Talk to the New York Times About Zohran Mamdani
It’s remarkable, the people you’ll hear from. Teach for even a little while at an expensive institution—the term they tend to prefer is “elite”—and odds are that eventually someone who was a studen…
lithub.com
November 9, 2025 at 10:55 AM
Reposted by Remco van Bree
September 28, 2025 at 11:23 PM
Reposted by Remco van Bree
Doing a quote on here feels surreal. Sadly I can't quote most posts ... I wonder if my old posts are locked like that... is there a way to unlock them?

#QuoteBoost #quotepost
November 8, 2025 at 7:35 PM
Reposted by Remco van Bree
Behold the zipper’s first upgrade in over a century. YKK, the Japanese company that makes about half the world’s zippers, has created a zipper that removes the traditional fabric tape, creating a lighter, more flexible, lower-impact closure that sits flush with garments. It requires new […]
Original post on wandering.shop
wandering.shop
November 7, 2025 at 5:05 PM
Reposted by Remco van Bree
The most important lesson for Democrats from Mamdani's victory is this: abandon the decades-old practice of triangulating to win the center. Instead, grow the base with a positive, joyful vision for what government can do when it gives up on being shackled to a Republican base.
November 5, 2025 at 2:54 AM
Reposted by Remco van Bree
October 30, 2025 at 1:11 AM
Found something incendiary in our mailbox so did some research. Funded by billionaires and AIPAC
November 2, 2025 at 3:00 PM
Reposted by Remco van Bree
The Python Software Foundation shows more spine than every single tech giant in just one single decision.

> Diversity, equity, and inclusion are core to the PSF’s values

https://pyfound.blogspot.com/2025/10/NSF-funding-statement.html
The PSF has withdrawn $1.5 million proposal to US government grant program
In January 2025, the PSF submitted a proposal to the US government National Science Foundation under the Safety, Security, and Privacy of Open Source Ecosystems program to address structural vulnerabilities in Python and PyPI. It was the PSF’s first time applying for government funding, and navigating the intensive process was a steep learning curve for our small team to climb. Seth Larson, PSF Security Developer in Residence, serving as Principal Investigator (PI) with Loren Crary, PSF Deputy Executive Director, as co-PI, led the multi-round proposal writing process as well as the months-long vetting process. We invested our time and effort because we felt the PSF’s work is a strong fit for the program and that the benefit to the community if our proposal were accepted was considerable. We were honored when, after many months of work, our proposal was recommended for funding, particularly as only 36% of new NSF grant applicants are successful on their first attempt. We became concerned, however, when we were presented with the terms and conditions we would be required to agree to if we accepted the grant. These terms included affirming the statement that we “do not, and will not during the term of this financial assistance award, operate any programs that advance or promote DEI, or discriminatory equity ideology in violation of Federal anti-discrimination laws.” This restriction would apply not only to the security work directly funded by the grant, **but to any and all activity of the PSF as a whole**. Further, violation of this term gave the NSF the right to “claw back” previously approved and transferred funds. This would create a situation where money we’d already spent could be taken back, which would be an enormous, open-ended financial risk. Diversity, equity, and inclusion are core to the PSF’s values, as committed to in our mission statement: > _The mission of the Python Software Foundation is to promote, protect, and advance the Python programming language, and to support and facilitate the growth of**a diverse and international community** of Python programmers._ Given the value of the grant to the community and the PSF, we did our utmost to get clarity on the terms and to find a way to move forward in concert with our values. We consulted our NSF contacts and reviewed decisions made by other organizations in similar circumstances, particularly The Carpentries. In the end, however, the PSF simply can’t agree to a statement that we won’t operate any programs that “advance or promote” diversity, equity, and inclusion, as it would be a betrayal of our mission and our community. We’re disappointed to have been put in the position where we had to make this decision, because we believe our proposed project would offer invaluable advances to the Python and greater open source community, protecting millions of PyPI users from attempted supply-chain attacks. The proposed project would create new tools for automated proactive review of all packages uploaded to PyPI, rather than the current process of reactive-only review. These novel tools would rely on capability analysis, designed based on a dataset of known malware. Beyond just protecting PyPI users, the outputs of this work could be transferable for all open source software package registries, such as NPM and Crates.io, improving security across multiple open source ecosystems. In addition to the security benefits, the grant funds would have made a big difference to the PSF’s budget. The PSF is a relatively small organization, operating with an annual budget of around $5 million per year, with a staff of just 14. $1.5 million over two years would have been quite a lot of money for us, and easily the largest grant we’d ever received. Ultimately, however, the value of the work and the size of the grant were not more important than practicing our values and retaining the freedom to support every part of our community. The PSF Board voted unanimously to withdraw our application. Giving up the NSF grant opportunity—along with inflation, lower sponsorship, economic pressure in the tech sector, and global/local uncertainty and conflict—means the PSF needs financial support now more than ever. We are incredibly grateful for any help you can offer. If you're already a PSF member or regular donor, you have our deep appreciation, and we urge you to share your story about why you support the PSF. Your stories make all the difference in spreading awareness about the mission and work of the PSF. How to support the PSF: * Become a Member: When you sign up as a Supporting Member of the PSF, you become a part of the PSF. You’re eligible to vote in PSF elections, using your voice to guide our future direction, and you help us sustain what we do with your annual support. * Donate: Your donation makes it possible to continue our work supporting Python and its community, year after year. * Sponsor: If your company uses Python and isn’t yet a sponsor, send them our sponsorship page or reach out to sponsors@python.org today. The PSF is ever grateful for our sponsors, past and current, and we do everything we can to make their sponsorships beneficial and rewarding.
pyfound.blogspot.com
October 27, 2025 at 4:04 PM
Reposted by Remco van Bree
"don't sleep on that sauce, girl"
"oh I won't. .... That sounds very messy."
October 25, 2025 at 4:27 PM
Reposted by Remco van Bree
Great more AI investment diagrams that look like a Hapsburg family tree.
October 25, 2025 at 12:04 AM
Reposted by Remco van Bree
Did anyone check on Assane Diop? I was under the impression that stealing diamonds in broad daylight out of the Louvre is something that is really only accomplished by the legendary Lupin.
October 21, 2025 at 6:56 PM
Reposted by Remco van Bree
But don’t call them Nazis
October 19, 2025 at 12:41 PM
Reposted by Remco van Bree
I _wish_ this were the last word on this subject

it's a good one

https://www.smbc-comics.com/comic/order-2
Saturday Morning Breakfast Cereal - Order
Click here to go see the bonus panel! Hovertext: It needs more leaves, but otherwise this is a perfect proof of concept. Today's News:
www.smbc-comics.com
October 18, 2025 at 4:46 AM
Reposted by Remco van Bree
Disappointed these “financial instruments” aren’t nearly as musical as I’d expected them to be. 😒
October 17, 2025 at 2:08 PM
Reposted by Remco van Bree
They could reopen the government by voting to suspend the filibuster (51 votes) and then passing the funding bill (51 votes).

Republicans have 53 votes.

They could avoid this if it really mattered to them and they think you're stupid enough not to realize it.
Vice President JD Vance on Sunday said there will be deeper cuts to the federal workforce the longer the government shutdown goes on, adding to the uncertainty facing hundreds of thousands who are already furloughed without pay amid the stalemate in Congress.
Vance warns 'deeper' cuts ahead for federal workers as shutdown enters 12th day
Vice President JD Vance is warning of deeper cuts to the federal workforce the longer the government shutdown goes on.
bit.ly
October 12, 2025 at 8:44 PM
Reposted by Remco van Bree
October 9, 2025 at 9:09 AM
Reposted by Remco van Bree
TIL about the OctoBass as a result of my random YouTube-live-music feed stumbling into a performance of Gounod’s “Messe Solonelle” which is pretty good and, well, has an octobass in the orchestra.

#music
October 6, 2025 at 4:50 AM
Reposted by Remco van Bree
they are from LA!

but the kid was like “yeah out west”

The theory is if there is a guitar and it’s “from out west” then it’s “country”

NYC children concern me sometimes.
October 3, 2025 at 6:22 PM
Reposted by Remco van Bree
There has been a rush among centrists like Gavin Newsom and Ezra Klein to brush over the hateful life of Charlie Kirk and valorize the man.

Let me be clear, killing Charlie Kirk was wrong and abhorrent.

We must condemn murder without sanitizing a man who built his empire on hate.

My latest piece.
We Must Not Posthumously Sanitize Charlie Kirk's Hateful Life
Influential anti-LGBTQ+ activist Charlie Kirk was assassinated on Wednesday. While condemning violence is something most can get behind, sanitization of his hate has gone too far.
www.erininthemorning.com
September 11, 2025 at 6:03 PM
Reposted by Remco van Bree
Today, we’re ready to show you the upcoming quote posts feature in more detail. We’ve put together a blog post with examples of how quote posts will work on Mastodon, ahead of early access on our own servers next week 💬 Full launch to come, in Mastodon v4.5 […]
Original post on mastodon.social
mastodon.social
September 11, 2025 at 6:29 PM
Reposted by Remco van Bree
So help me, I laughed
#shitpost #meme #distractedboyfriend
September 9, 2025 at 2:13 PM