27 comments

  • bloppe11 hours ago
    While I hate defending GHA, the docs do include this:<p>- Using the commit SHA of a released action version is the safest for stability and security.<p>- If the action publishes major version tags, you should expect to receive critical fixes and security patches while still retaining compatibility. Note that this behavior is at the discretion of the action&#x27;s author.<p>So you can basically implement your own lock file, although it doesn&#x27;t work for transitive deps unless those are specified by SHA as well, which is out of your control. And there is an inherent trade-off in terms of having to keep abreast if critical security fixes and updating your hashes, which might count as a charitable explanation for why using hashes is less prevalent.
    • onionisafruit6 hours ago
      On the other hand, this issue has been known to GitHub since shortly after Actions’ release[0]. They added some cya verbiage to their docs, but they never followed up by making version pinning meaningful.<p>Sure you can implement it yourself for direct dependencies and decide to only use direct dependencies that also use commit sha pinning, but most users don’t even realize it’s a problem to begin with. The users who know often don’t bother to use shas anyway.<p>Or GitHub could spend a little engineer time on a feasible lock file solution.<p>I say this as somebody who actually likes GitHub Actions and maintains a couple of somewhat well-used actions in my free time. I use sha pinning in my composite actions and encourage users to do the same when using them, but when I look at public repos using my actions it’s probably 90% using @v1, 9% @v1.2 and 1% using commit shas.<p>[0] Actions was the first Microsoft-led project at GitHub — from before the acquisition was even announced. It was a sign of things to come that something as basic as this was either not understood or swept under the rug to hit a deadline.
    • amake10 hours ago
      &gt; it doesn&#x27;t work for transitive deps unless those are specified by SHA as well, which is out of your control<p>So in other words the strategy in the docs doesn&#x27;t actually address the issue
      • WillDaSilva7 hours ago
        There&#x27;s a repository setting you can enable to prevent actions from running unless they have their version pinned to a SHA digest. This setting applies transitively, so while you can&#x27;t force your dependencies to use SHA pinning for their dependencies, you can block any workflow from running if it doesn&#x27;t.
    • bramblerose11 hours ago
      - Using the commit SHA of a released action version is the safest for stability and security.<p>This is not true for stability in practice: the action often depends on a specific Node version (which may not be supported by the runner at some point) and&#x2F;or a versioned API that becomes unsupported. I&#x27;ve had better luck with @main.
      • bloppe11 hours ago
        Depends what you mean by stability. The post is complaining about the lack of lockfiles, and the problem you describe would also be an issue with lockfiles.
    • csomar5 hours ago
      Using an SHA is an anti-pattern for me. Because by using one, you kind of modeled &quot;I am getting this fixed&#x2F;static thing&quot;; when in reality, it is very far from that. I got bitten by it twice that I learned that you either have a lock file or you don&#x27;t.
  • saagarjha12 hours ago
    What’s more, GitHub has basically stopped maintaining their own actions, pushing people to sketchy forks to do basic things. Their entire ecosystem is basically held up with duct tape and gets very little investment.
    • wnevets5 hours ago
      &gt; Their entire ecosystem is basically held up with duct tape and gets very little investment.<p>That isn&#x27;t gonna get better anytime soon.<p>&quot;GitHub Will Prioritize Migrating to Azure Over Feature Development&quot; [1]<p>[1] <a href="https:&#x2F;&#x2F;thenewstack.io&#x2F;github-will-prioritize-migrating-to-azure-over-feature-development&#x2F;" rel="nofollow">https:&#x2F;&#x2F;thenewstack.io&#x2F;github-will-prioritize-migrating-to-a...</a>
      • amarant5 hours ago
        Hey at least we can all expect lots of extra days off because &quot;GitHub is down&quot; once they&#x27;re done with that migration!
        • phantasmish4 hours ago
          They had working infra and a great case for keeping fairly &quot;close to the metal&quot;. Complicated files-heavy workload that needs tons of clever caching to perform well, lots of writes, lots of non-HTTP TCP traffic.<p>Retrofitting that into &quot;cloud&quot; bullshit is such a bad idea.
          • theamk2 hours ago
            meh, I dunno.<p>Using bare-metal requires competent Unix admins, and Actions team is full of javascript clowns (see: decision to use dashes in environment variable; lack of any sort of shell quoting support in templates; keeping logs next to binaries in self-hosted runners). Perhaps they would be better off using infra someone else maintains.
      • sebazzz1 hour ago
        Except actions&#x2F;ai-task. Im sure that one will come.
    • mixedbit11 hours ago
      An interesting things is that GitHub is an expensive service and my guess would be that MS makes good money on it. Our small company paid about 200+ USD monthly for GitHub, much larger cumulative cost than Windows licenses. My believe was that Windows is getting worse, because it is considered legacy business by MS in favor of new offerings such as GitHub subscriptions.
      • Normal_gaussian9 hours ago
        Very many more people use Windows to GitHub.<p>GitHub also runs a free tier with significant usage.<p>There are ~1.4b paid instances of Windows 10&#x2F;11 desktop; and ~150m Monthly active accounts on GitHub, of which only a fraction are paid users.<p>Windows is generating something in the region of $30b&#x2F;yr for MS, and GitHub is around $2b&#x2F;yr.<p>MS have called out that Copilot is responsible for 40% of revenue growth in GitHub.<p>Windows isn&#x27;t what developers buy, but it is what end users buy. There are a lot more end users than developers. Developers are also famously stingy. However, in both products the margin is in the new tech.
        • tonyhart78 hours ago
          github value maybe as not apparent as other product<p>but github is pair well with MS other core product like Azure and VS&#x2F;VSC department<p>MS has a good chance to have vertical integration on how software get written from scratch to production, if they can somehow bundle everything to all in one membership like Google one subs, I think they have a good chance
      • samhh11 hours ago
        I was surprised to learn that Depot runners, which are much faster, are also much cheaper. Would highly recommend them for anyone trapped on GitHub.
        • servercobra5 hours ago
          Blacksmith.sh has been great for us. Massively sped up tests and a huge improvement for Docker builds over both Actions and Google Cloud Build.<p>Only downside is they never got back to us about their startup discount.
          • bksmithconnor5 hours ago
            hey there! blacksmith solutions engineer here :) love to hear we&#x27;ve helped speed up your tests and docker builds!!<p>could you shoot me your GH org so I can apply your startup discount? feel free to reach out to support@blacksmith.sh and I&#x27;ll get back to you asap. thanks for using blacksmith!
            • servercobra5 hours ago
              Thank you! We&#x27;ve loved it! Looks like you found me, thank you :)
        • 9999000009995 hours ago
          Yeah, but I have to set that up.<p>GitHub actions more or less just work for what most people need. If you have a complex setup, use a real CI&#x2F;CD system.
          • lijok2 hours ago
            I haven’t use depot but I’m pretty sure the setup is literally just switching out the runs-on value in your workflows
          • bastardoperator4 hours ago
            Such as?
            • 9999000009994 hours ago
              Jenkins is open source and very well documented.<p>GitHub Actions are really for just short scripts. Don&#x27;t take your Miata off road.
              • bastardoperator2 hours ago
                LOL, I worked on the Jenkins project paid for three years. Even they use actions to build Jenkins.<p><a href="https:&#x2F;&#x2F;github.com&#x2F;jenkinsci&#x2F;jenkins&#x2F;tree&#x2F;master&#x2F;.github&#x2F;workflows" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;jenkinsci&#x2F;jenkins&#x2F;tree&#x2F;master&#x2F;.github&#x2F;wor...</a>
              • lijok2 hours ago
                Why is gha just for short scripts, out of interest?
              • cyberpunk3 hours ago
                Jenkins! For the love of god don’t listen to this.
                • 9999000009993 hours ago
                  Always open to learning, what&#x27;s wrong with Jenkins?<p>It&#x27;s a bit bloated, but it&#x27;s free and works.
        • LilBytes10 hours ago
          Depot.dev is great.
          • kylegalbraith4 hours ago
            Thank you! Really appreciate the support.
        • kylegalbraith5 hours ago
          Thank you for the kind shout out! Always happy to see comments like this. If anyone is looking for a better GitHub or GitHub Actions experience, feel free to reach out anytime.
        • herpdyderp5 hours ago
          What are Depot runners?
          • kylegalbraith4 hours ago
            Founder of Depot here. We provide faster and more reliable GitHub Actions runners (as well as other build performance services) at half the cost of GitHub [0]<p>[0] <a href="https:&#x2F;&#x2F;depot.dev&#x2F;">https:&#x2F;&#x2F;depot.dev&#x2F;</a>
            • herpdyderp2 hours ago
              Ah got it, thanks. I thought there was another kind of GitHub runner (like their &quot;large&quot; runners) that I hadn&#x27;t heard of.
      • eviks9 hours ago
        The legacy business usually explains why there are no new features, only minor maintenance, it doesn&#x27;t explain why there is a lot of investment into work that makes it worse
      • blibble9 hours ago
        I wouldn&#x27;t be surprised if there isn&#x27;t some plan to make all of GitHub&#x27;s backend &quot;legacy&quot;<p>and switch everyone to the dumpster fire that is Azure DevOps<p>and if you thought GitHub Actions was bad...
        • everfrustrated8 hours ago
          When Microsoft bought GitHub they cancelled GitHubs own early CI effort and rebranded the existing Azure DevOps as GitHub Actions.<p>The GitHub Actions runner source code is all dotnet. GitHub was a Ruby shop.
        • fuzzy29 hours ago
          IIRC Azure DevOps was the “dead one”, all new development only takes place on GitHub.<p>From my perspective, Azure Pipelines is largely the same as GitHub Actions. I abhor this concept of having abstract and opaque “tasks”.
          • WorldMaker4 hours ago
            There&#x27;s direct evidence that GitHub Actions was the rewrite of Azure Pipelines that was originally planned to finish 5 years ago and got &quot;stuck&quot; (because all their resources moved to GitHub). For a while you could find 2020 roadmap repositories (on GitHub) for AzDO talking up a Pipelines rewrite bringing a lot more features (including better Docker alignment versus Pipelines&#x27; much more complex &quot;runner skills&quot;) that instead showed up in the first version of GitHub Actions.<p>Microsoft claims Azure DevOps still has a roadmap, but it&#x27;s hard to imagine that the real roadmap isn&#x27;t simply &quot;Wait for more VPs in North Carolina to retire before finally killing the brand&quot;.
        • re-thc8 hours ago
          &gt; I wouldn&#x27;t be surprised if there isn&#x27;t some plan to make all of GitHub&#x27;s backend &quot;legacy&quot;<p>&gt; and switch everyone to the dumpster fire that is Azure DevOps<p>The other way around. Azure DevOps is 1&#x2F;2 a backend for Github these days. Github re-uses a lot of Azure Devops&#x27; infrastructure.
      • rurban6 hours ago
        github doesn&#x27;t pay microsoft for the azure runners. that&#x27;s why they came up with actions at all. microsoft gets streetcreds for stable runners, github could replace travis and appveyor.
      • Hamuko5 hours ago
        It&#x27;s not really that expensive. GitHub Enterprise is like $21&#x2F;month&#x2F;user while GitLab Ultimate was $100&#x2F;month&#x2F;user the last time GitLab published prices. These days GitLab Ultimate is &quot;contact us for pricing&quot; while the cheaper GitLab Premium is $29&#x2F;month&#x2F;user.<p>I guess Bitbucket is cheaper but you&#x27;ll lose the savings in your employees bitching about Bitbucket to each other on Slack.
      • Ygg211 hours ago
        &gt; My believe was that Windows is getting worse, because it is considered legacy business by MS in favor of new offerings such as GitHub subscriptions.<p>What if GH actions is considered legacy business in favour of LLMs?
    • silverwind11 hours ago
      The quality of setup-* actions has definitely gone down and there are a lot of strange decisions being made. I assume the original authors of these actions have long left the company.
    • crote11 hours ago
      This is the first time I&#x27;ve heard of this, do you happen to have an example?
      • coryrc11 hours ago
        <a href="https:&#x2F;&#x2F;github.com&#x2F;search?q=org%3Aactions+%22we+are+allocating+resources+towards+other+areas+of+Actions+and+are+not+taking+contributions+to+this+repository+at+this+time.%22&amp;type=code" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;search?q=org%3Aactions+%22we+are+allocati...</a><p>i.e. from <a href="https:&#x2F;&#x2F;github.com&#x2F;actions&#x2F;cache&#x2F;?tab=readme-ov-file#note" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;actions&#x2F;cache&#x2F;?tab=readme-ov-file#note</a><p><pre><code> Thank you for your interest in this GitHub repo, however, right now we are not taking contributions. We continue to focus our resources on strategic areas that help our customers be successful while making developers&#x27; lives easier. While GitHub Actions remains a key part of this vision, we are allocating resources towards other areas of Actions and are not taking contributions to this repository at this time. The GitHub public roadmap is the best place to follow along for any updates on features we’re working on and what stage they’re in.</code></pre>
        • crote11 hours ago
          That&#x27;s insane, so they are basically dropping support on a <i>core feature</i> of GH Actions?
          • everfrustrated8 hours ago
            What they are really saying is they don&#x27;t want third party contributions. They don&#x27;t have anyone triaging Issues or PRs so don&#x27;t send them.<p>They will occasionally make changes if it aligns with a new product effort driven from within the org.<p>Saying they&#x27;re dropping support is a stretch esp as very few people actually pay for their Support package anyway..... (Yes they do offer it as a paid option to Enterprise customers)
          • saagarjha11 hours ago
            This is on the checkout action too, by the way. You know, the very first thing people put in their CI pipeline.
            • conartist610 hours ago
              Wow, Microsoft just can&#x27;t stop taking a dump on their users
              • weikju10 hours ago
                they probably have a half-assed plan to push some sort of checkout action copilot button instead of dependable scripts&#x2F;actions.
                • captn3m09 hours ago
                  <a href="https:&#x2F;&#x2F;githubnext.com&#x2F;projects&#x2F;agentic-workflows&#x2F;" rel="nofollow">https:&#x2F;&#x2F;githubnext.com&#x2F;projects&#x2F;agentic-workflows&#x2F;</a><p>&gt; Instead of writing bespoke scripts that operate over GitHub using the GitHub API, you describe the desired behavior in plain language. This is converted into an executable GitHub Actions workflow that runs on GitHub using an agentic &quot;engine&quot; such as Claude Code or Open AI Codex. It&#x27;s a GitHub Action, but the &quot;source code&quot; is natural language in a markdown file.
                  • woodruffw5 hours ago
                    This seems like a real headache to me. I understand the value proposition of LLMs in the development cycle, but CI&#x2F;CD is probably the last place where I want any degree of nondeterminism.
                  • kokada8 hours ago
                    This looks like backwards. I would understand using a LLM to generate a GitHub Actions YAML, but always running your action from a Markdown file seems extremely wasteful in terms of resources.<p>Edit: ok, looking at example it makes more sense. The idea is to run specific actions that are probably not well automated, like generating and keeping documentation up-to-date. I hope people don&#x27;t use it to automate things like CI runs though.
              • imglorp9 hours ago
                Because they know most abusive business relationship partners don&#x27;t leave (see also Oracle). No matter how many bruises, CIO&#x27;s are not going to get fired for buying Big Blue or whoever is the current abusive standard.
      • anentropic11 hours ago
        <a href="https:&#x2F;&#x2F;github.com&#x2F;orgs&#x2F;actions&#x2F;repositories?language=&amp;q=&amp;sort=&amp;type=archived" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;orgs&#x2F;actions&#x2F;repositories?language=&amp;q=&amp;so...</a><p><a href="https:&#x2F;&#x2F;github.com&#x2F;actions&#x2F;create-release" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;actions&#x2F;create-release</a>
        • ptx11 hours ago
          The funny thing about the last one is that those actions ultimately boil down to invoking their CLI tool (which is pre-installed on the runners) with &quot;gh release create ...&quot;, so you can just do that yourself and ignore the third-party actions and the issues that come with them. Invoking an action isn&#x27;t really any easier than invoking the CLI tool.
          • WorldMaker4 hours ago
            Yeah, what really needs to happen with that repo is to put that in the README to use the gh CLI instead of pointing to the third-party action with questionable security policies. If they were accepting PRs for that repo, it would be an easy PR to make.
    • Bombthecat9 hours ago
      Didn&#x27;t they announce to slow down development for AI?
    • souenzzo8 hours ago
      you just described every microsoft business model.
    • bilekas12 hours ago
      That issue with their own small private forks has actually raised its head while testing out the AI slop generator thing it has, making anything it produces for you not self hoatable unless you rewrite a lot of basic functions. Sweet irony.
    • Cthulhu_11 hours ago
      Which is strange because they have infinite Microsoft money and can print more if they get it into enterprises.<p>(we run a private gitlab instance and a merge request can spawn hundreds of jobs, that&#x27;s a lot of potential Gitlab credits)
    • mhitza11 hours ago
      With AI you won&#x27;t need CI anymore, it&#x27;s all going straight to prod anyway &#x2F;s<p>Actions is one thing, but after all these years where the new finegrained access tokens aren&#x27;t still supported across all the product endpoints (and the wack granularity) is more telling about their lack of investment in maintenance.
    • miohtama11 hours ago
      Everyone is free to use alternative CI&#x2F;CD workflow pipelines. These are often better than Github Actions.<p>These include<p>- <a href="https:&#x2F;&#x2F;circleci.com&#x2F;" rel="nofollow">https:&#x2F;&#x2F;circleci.com&#x2F;</a><p>- <a href="https:&#x2F;&#x2F;www.travis-ci.com&#x2F;" rel="nofollow">https:&#x2F;&#x2F;www.travis-ci.com&#x2F;</a><p>- Gitlab<p>Open source:<p>- <a href="https:&#x2F;&#x2F;concourse-ci.org&#x2F;" rel="nofollow">https:&#x2F;&#x2F;concourse-ci.org&#x2F;</a> (discussed in the context of Radicle here <a href="https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=44658820">https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=44658820</a> )<p>- Jenkins<p>-etc.<p>Anyone can complain as much as they want, but unless they put the money where their mouth is, it&#x27;s just noise from lazy people.
      • saagarjha11 hours ago
        I’d appreciate not being called lazy for mentioning a lack of investment on Microsoft’s side to secure their paid and fairly lucrative service that they bought a popular code hosting platform to integrate with.
        • rjzzleep10 hours ago
          Can someone explain what this somewhat recent phenomenon is where people feel the need to defend the worlds biggest billion dollar businesses, that are also often subsidized by tax payer money in weird ways?<p>How did we go in 20 years from holding these companies to account when they&#x27;d misbehave to acting as if they are poor damsels in distress whenever someone points out a flaw?
          • nsoqm10 hours ago
            The original comment said to stop giving money to these companies if they are not giving you a satisfactory service.<p>The opposite, to be lazy and to continue giving them money whilst being unhappy with what you get in return, would actually be more like defending the companies.
            • ImPostingOnHN6 hours ago
              The original comment actually criticized Microsoft for a lack of investment to secure their paid and fairly lucrative service that they bought a popular code hosting platform to integrate with.<p>The opposite we see here: to <i>not</i> criticize them; to blame Microsoft&#x27;s failure on the critics; and even to discourage any such criticism, are actually <i>more</i> like defending large companies.
              • miohtama6 hours ago
                It is a lucrative service just because people are lazy and keep buying from Microsoft. Otherwise, they would migrate to better alternatives.<p>This especially includes governments and other institutional buyers.
          • drdec8 hours ago
            &gt; How did we go in 20 years from holding these companies to account when they&#x27;d misbehave to acting as if they are poor damsels in distress whenever someone points out a flaw?<p>Honestly I think the problem is more a rosy view of the past versus any actual change in behavior. There have always been defenders of such companies.
          • hexbin01010 hours ago
            &gt; How did we go in 20 years from holding these companies to account when they&#x27;d misbehave to acting as if they are poor damsels in distress whenever someone points out a flaw?<p>They hired a ton of people on very very good salaries
          • tonyhart78 hours ago
            I think big tech being so big now that these &quot;issue&quot; is too small for their priority is saying something<p>You better thank god for MS for being lazy and incompetent, the last thing we want for big tech is being innovative and have a stronger monopoly
          • thrdbndndn9 hours ago
            I won&#x27;t &quot;defend&quot; Microsoft in this case, but I am always annoyed by phrases like &quot;world&#x27;s biggest billion-dollar businesses... bablah&quot;.<p>Their size or past misbehaviors shouldn&#x27;t be relevant to this discussion. Bringing those up feels a bit like an ad hominem. Whether criticism is valid should depend entirely on how GitHub Actions actually works and how it compares to similar services.
            • gcr8 hours ago
              Ad hominem applies to people. Corporations aren’t people, and ICs aren’t corporations.
            • Sl1mb08 hours ago
              Microsoft&#x27;s past behavior _may_ explain *why* there is a lack of investment in Github Actions; so yes, TheFeelz are relevant.
              • thrdbndndn7 hours ago
                Then I agree with this. But still feel their size is irrelevant.
                • Tostino7 hours ago
                  Their size is relevant in so far as it allows them to make really any investment they want to in GHA without it causing a cash flow problem.
            • wizzwizz48 hours ago
              &gt; <i>Their size or past misbehaviors shouldn&#x27;t be relevant to this discussion.</i><p>If the past misbehaviours are exactly the same shape, there&#x27;s not all that much point re-hashing the same discussion with the nouns renamed.
        • ironmagma10 hours ago
          There is a massive problem in open source where some people equate pointing out a problem with being too lazy to solve it — when in reality this just stifles the conversation. Especially when a prerequisite to any group project accomplishing anything is to first discuss the problem to be solved.
          • rjzzleep10 hours ago
            No that&#x27;s actually a completely different issue. You&#x27;re talking about volunteers working on side projects that are sometimes foundational to the way the internet works and then people feel entitled to tell them what to do without contributing.<p>Here we are talking about one of the worlds most valuable companies that gets all sorts of perks, benefits and preferential treatment from various entities and governments on the globe and somehow we have to be grateful when they deliver garbage while milking the business they bought.
            • ironmagma4 hours ago
              No, that&#x27;s actually the same issue. &quot;Entitled to tell them what to do without contributing&quot; is not a problem. Let them tell whoever what to do, the response is always the same: &quot;patches welcome,&quot; or if that isn&#x27;t even true (which it doesn&#x27;t have to be), &quot;feel free to fork.&quot;
              • baq3 hours ago
                OTOH if you didn&#x27;t pay for support you shouldn&#x27;t expect support. &#x27;patches welcome&#x27; is a very valid response.
                • ironmagma3 hours ago
                  Is not the whole FOSS movement about receiving something you did not pay for? Going as far as to say that’s even what users deserve?
                  • baq2 hours ago
                    don&#x27;t confuse &#x27;receiving something you did not pay for&#x27; with &#x27;being allowed to feel entitled to anything&#x27; is all. &#x27;open source&#x27; is just that, nothing more. if you want a service with your source, be prepared to sponsor it.
                    • ironmagma1 hour ago
                      I still think people should want things and be vocal about what they want. This is the natural way for people to know what needs to be built. It is different from demanding something.<p>And besides that, a lot of people on here <i>do</i> pay for Github in the first place.
      • XCabbage8 hours ago
        Well, actually, no, not everyone is free to use alternatives. Anyone using CI for &quot;Trusted Publishing&quot; of packages to PyPI or npm needs to use GitHub Actions or GitLab CI&#x2F;CD. CircleCI and Travis CI are not supported. So many big open source projects for the two most popular languages in the world are now locked out of the alternatives you propose.<p>(I find it extremely sketchy from a competition law perspective that Microsoft, as the owner of npm, has implemented a policy banning npm publishers from publishing via competitors to GitHub Actions - a product that Microsoft also owns. But they have; that is the reality right now, whether it&#x27;s legal or not.)
        • woodruffw5 hours ago
          Trusted Publishing on PyPI supports Google Cloud and ActiveState as well. It’s not tied to GitHub or GitLab. To my recollection I looked at CircleCI support a while back, and ran into limitations on the claims they exposed.<p>(It can also be extended to arbitrary third party IdPs, although the benefit of that is dependent on usage. But if you have another CI&#x2F;CD provider that you’d like to integrate into PyPI, you should definitely flag it on the issue tracker.)
        • LtWorf8 hours ago
          I was never convinced that trusted publishing solves any security problem, other than letting pypi eventually solve the problem of banning russian&#x2F;iranian&#x2F;whatever people just by relying on github doing it for them.
      • ChrisMarshallNY10 hours ago
        <i>&gt; unless they put the money where their mouth is, it&#x27;s just noise</i><p>I used to work for a Japanese company, and one of their core philosophies was <i>“Don’t complain, unless you have a solution.”</i> In my experience, this did not always have optimal outcomes: <a href="https:&#x2F;&#x2F;littlegreenviper.com&#x2F;problems-and-solutions&#x2F;" rel="nofollow">https:&#x2F;&#x2F;littlegreenviper.com&#x2F;problems-and-solutions&#x2F;</a>
        • hrimfaxi7 hours ago
          My favorite retort to that is, &quot;I don&#x27;t have to know how to fix it to know my arm is broken.&quot;
      • klausa10 hours ago
        I don’t make the purchasing decision for my employer, but I certainly have to deal with their fallout, so I’ll keep complaining if that’s okay with you.
        • miohtama6 hours ago
          If you are not part of the solution, then you are part of the problem.
      • CamouflagedKiwi11 hours ago
        I&#x27;ve used CircleCI quite a bit in the past; it was pretty good. Feels tough for them to compete with GHA though when you&#x27;re getting GHA credits for free with your code hosting.<p>I used Travis rather longer ago, it was not great. Circle was a massive step forward. I don&#x27;t know if they have improved it since but it only felt useful for very simplistic workflows, as soon as you needed anything complex (including any software that didn&#x27;t come out of the box) you were in a really awkward place.
        • olafmol7 hours ago
          CircleCI made great steps the last few years, f.e. to better support proper DRY working, supporting OPA policies-as-code, VSCode extensions with &quot;dry-run&quot; options.<p>For some examples of more advanced usecases take a look: <a href="https:&#x2F;&#x2F;circleci.com&#x2F;blog&#x2F;platform-toolkit&#x2F;" rel="nofollow">https:&#x2F;&#x2F;circleci.com&#x2F;blog&#x2F;platform-toolkit&#x2F;</a><p>Disclaimer: i work for CircleCI.
        • aprilnya11 hours ago
          I mean, they do have a free plan with 6,000 minutes
      • gabrielgio8 hours ago
        &gt; Anyone can complain as much as they want, but unless they put the money where their mouth is, it&#x27;s just noise from lazy people.<p>Once I&#x27;m encharged of budge decisions of my company I&#x27;ll make sure that none will go to any MS and Atlassian product. Until then I&#x27;ll keep complaining.
      • c0balt10 hours ago
        It should be highlighted that Gitlab CI&#x2F;CD (self-hostable runner and GitLab itself) is also OSS.
      • Bombthecat9 hours ago
        I&#x27;m a huge fan of: <a href="https:&#x2F;&#x2F;onedev.io&#x2F;" rel="nofollow">https:&#x2F;&#x2F;onedev.io&#x2F;</a> it might not the best, but it&#x27;s fast it and does it&#x27;s job!
      • dimgl8 hours ago
        I tried to use CircleCI and I gotta say, it is absolutely not better than GitHub Actions…
        • IshKebab8 hours ago
          I have also used Travis. Ditto.<p>Github Actions is actually one of the better CI options out there, even if on an absolute scale it is still pretty bad.<p>As far as I can tell nobody has made a CI system that is <i>actually good</i>.
          • rileymichael5 hours ago
            buildkite is leaps and bounds above the others. especially if you need to really tailor your workloads to the change diff (say in a monorepo), the dynamic pipeline support is superb.<p>really surprised there are no others though. dagger.io was in the space but the level of complexity is an order of magnitude higher
          • kspacewalk27 hours ago
            GitLab CI is pretty close to being actually good. Certainly less brittle than GitHub Actions from the looks of it...
            • IshKebab14 minutes ago
              It&#x27;s really not. I&#x27;ve used Gitlab CI extensively and the number of issues we had...
          • Marsymars3 hours ago
            I quite liked Bitrise for mobile apps when I used that.
          • no_wizard7 hours ago
            JetBrains TeamCity is pretty good IMHO
      • zulban7 hours ago
        It sounds like you&#x27;ve never worked in a large org before.
      • NamlchakKhandro10 hours ago
        CircleCI is 100% trash.<p>Don&#x27;t waste your time
      • koakuma-chan11 hours ago
        Or roll your own
      • ramon15611 hours ago
        according to travis-ci, Microsoft uses that? Lol
        • input_sh10 hours ago
          You&#x27;re falling for a marketing trick.<p>What that type of section usually means is &quot;there&#x27;s someone from Microsoft that signed up for our service using his work account&quot;, sometimes it means &quot;there&#x27;s some tiny team within Microsoft that uses our product&quot;, but it very rarely (if ever) means &quot;the entire company is completely reliant on our product&quot;.
          • SkyPuncher7 hours ago
            Yes and no. Generally logo usage requires permission. While the usage isn’t the whole company, it’s enough to justify some sort of logo usage.
    • vbezhenar6 hours ago
      I never used any actions and never understood why would I need to. I just wrote bash script to build my project and that&#x27;s about it. This modern tendency to add dependencies for trivial things baffles me. You don&#x27;t need &quot;action&quot; to do `git clone`.
  • baq11 hours ago
    Normally I’d say stop kicking the dead horse, but GHA deserves all the complaints it gets and then some. It’s the embodiment of everything that’s bad in ‘less is more’.<p>My biggest concern with it is that it’s somehow the de facto industry standard. You could do so much better with relatively small investments, but MS went full IE6 with it… and now there’s a whole generation of young engineers who don’t know how short their end of the stick actually is since they never get to compare it to anything.
    • bjackman10 hours ago
      It&#x27;s funny that absolutely everything about GHA fucking sucks, and everyone agrees about this. BUT, the fact that it&#x27;s free compute, and it&#x27;s &quot;right there&quot;... means it&#x27;s very very difficult to say no to!<p>Personally I&#x27;ve just retired a laptop and I&#x27;m planning to turn it into a little home server. I think I&#x27;m gonna try spinning up Woodpecker on there, I&#x27;m curious to see what a CI system people don&#x27;t hate is like to live with!
      • kminehart6 hours ago
        I can already tell by their example that I don&#x27;t like it. I&#x27;ve worked with a bunch of different container-based CI systems and I&#x27;m getting a little tired seeing the same approach by done slightly differently.<p><pre><code> steps: - name: backend image: golang commands: - go build - go test - name: frontend image: node commands: - npm install - npm run test - npm run build </code></pre> Yes, it&#x27;s easy to read and understand and it&#x27;s container based, so it&#x27;s easy to extend. I could probably intuitively add on to this. I can&#x27;t say the same for GitHub, so it has that going for it.<p>But the moment things start to get a little complex then that&#x27;s when the waste starts happening. Eventually you&#x27;re going to want to _do_ something with the artifacts being built, right? So what does that look like?<p>Immediately that&#x27;s when problems start showing up...<p>- You&#x27;ll probably need a separate workflow that defines the same thing, but again, only this time combining them into a Docker image or a package.<p><pre><code> - I am only now realizing that woodpecker is a fork of Drone. This was a huuuge issue in Drone. We ended up using Starlark to generate our drone yaml because it lacked any kind of reusability and that was a big headche. </code></pre> - If I were to only change a `frontend` file or a `backend` file, then I&#x27;m probably going to end up wasting time and compute rebuilding the same artifacts over and over.<p><pre><code> - GitHub&#x27;s free component honestly hurts itself here. I don&#x27;t have to care about waste if it&#x27;s mostly free anyways. </code></pre> - Running locally using the local backend... looks like a huge chore. In Drone this was basically impossible.<p>I really wish someone would take a step back and really think about the problems being solved here and where the current tooling fails us. I don&#x27;t see much effort being put into the things that really suck about github actions (at least for me): legibility, waste, and the feedback loop.
      • duped26 minutes ago
        &gt; absolutely everything about GHA fucking sucks<p>By adding one file to your git repo, you get cross-platform build &amp; test of your software that can run on every PR. If your code is open source, it&#x27;s free(ish) too.<p>It feels like a weekend project that a couple people threw together and then has been held together by hope and prayers with more focus on scaling it than making it well designed.
    • mvc10 hours ago
      &gt; there’s a whole generation of young engineers who don’t know how short their end of the stick actually is<p>I&#x27;m from a generation who had to use VSS for a few years. The sticks are pretty long these days, even the ones you get from github.
      • ChrisMarshallNY9 hours ago
        <i>&gt; VSS</i><p>I just had trauma!<p>I will say that SourceSafe had one advantage: You could create &quot;composite&quot; proxy workspaces.<p>You could add one or two files from one workspace, and a few from another, etc. The resulting &quot;avatar&quot; workspace would act like they were all in the same workspace. It was cool.<p>However, <i>absolutely everything else</i> sucked.<p>I don&#x27;t miss it.
        • gcr8 hours ago
          So it’s a workspace that includes changes from multiple branches at once, like `jj new revset-1 revset-2 revset-3 …` ?<p>(Git has octopus merges, jj just calls them “merge commits” even though they may have more than two parents)
          • andrewaylett3 hours ago
            No, it let you continue to follow the main branch for <i>most</i> files, while files you edited would have their changes saved to a different location. And was just about as horrible as you might imagine.<p>We moved from VSS to SVN, and it took a little encouraging for the person who had set up our branching workflow using that VSS feature to be happy losing it if that freed us from VSS.
          • ChrisMarshallNY8 hours ago
            Don&#x27;t remember exactly. If I think about it, it could be quite complex.<p>Git has the concept of &quot;atomic repos.&quot; Repos are a single unit, including all files, branches, tags, etc.<p>Older systems basically had a single repo, with &quot;lenses&quot; into sections of the repo (usually called &quot;workspaces,&quot; or somesuch. VSS called them something else, but I can&#x27;t remember).<p>I find the atomic repo thing awkward; especially wrt libraries. If I include a package, I get the whole kit &amp; kaboodle; including test harnesses and whatnot. My libraries thend to have a <i>lot</i> more testing code than library code.<p>Also, I would love to create a &quot;dependency repo,&quot; that aggregates the exported parts of the libraries that I&#x27;m including into my project, pinned at the required versions. I guess you could say package managers are that, but they are kind of a blunt instrument. Since I eat my own dog food, I&#x27;d like to be able to write changes into the dependency, and have them propagate back to their home repo, which I can <i>sort of</i> do now, if I make it a point to find the dependency checkout, make a change, then push that change, but it&#x27;s awkward.<p>But that seems crazy complex (and dangerous), so I&#x27;m OK with the way things work now.
            • gcr8 hours ago
              Your workflow is fascinating! What languages do you work in, if you don’t mind me asking?<p>Both git and jj have sparse checkouts these days, it sounds like you’d be into that<p>Do you vendor the libraries you use? Python packages typically don’t include the testing or docs in wheels uploaded to PyPI, for instance<p>These days in Pythonland, it’s typical to use a package manager with a lockfile that enforces build reproducibility and SHA signatures for package attestation. If you haven’t worked with tools like uv, you might like their concepts (or you might be immediately put off by their idea of hermetically isolated environments idk)
              • ChrisMarshallNY7 hours ago
                I work mostly in Swift (native Apple apps). Most of my libraries are Swift Package Manager modules.<p>You can see most of my stuff in GH. You need to look at the organizations, as opposed to my personal repos: <a href="https:&#x2F;&#x2F;github.com&#x2F;ChrisMarshallNY#browse-away" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;ChrisMarshallNY#browse-away</a><p>Thanks for the heads-up. I&#x27;ll give it a gander.
            • baq8 hours ago
              a repo is a repo - you&#x27;re describing what is nowadays known as a &#x27;monorepo&#x27; and it&#x27;s a perfectly reasonable and desirable even exactly for the reasons you mention, except the &#x27;distributed&#x27; part makes it very inconvenient to handle on dev boxes if it grows a lot.<p>in a centralized VCS there are viable CICD options like &#x27;check the compiler binaries in&#x27; or even &#x27;check the whole builder OS image in&#x27; which git is simply not able to handle by design and needs extensions to work around deficiencies. git winning the mindshare battle made these a bit forgotten, but they were industry standard a couple decades ago.
            • cindyllm8 hours ago
              [dead]
    • zahlman11 hours ago
      I&#x27;m accustomed to just doing as much as possible locally. GHA doesn&#x27;t even seem like a value-add over that for me.
  • pjc5011 hours ago
    This is making me feel quietly vindicated in pushing back on migrating our Jenkins&#x2F;Ansible setup to GHA simply because corporate wanted the new shiny thing. Fortunately the &quot;this will be a lot of work, i.e. cost&quot; argument won.<p>Mind you, CI does always involve a surprising amount of maintenance. Update churn is real. And Macs still are very much more fiddly to treat as &quot;cattle&quot; machines.
  • domenkozar8 hours ago
    What if GitHub Actions were local-first and built using Nix (proper locking)?<p><a href="https:&#x2F;&#x2F;github.com&#x2F;cachix&#x2F;cloud.devenv.sh" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;cachix&#x2F;cloud.devenv.sh</a>
    • no_wizard7 hours ago
      Hosted code on GitHub no less
  • DalekBaldwin4 hours ago
    I&#x27;m assuming the lockfile should be checked into the repo itself, which presents a bootstrapping problem if you have to run an action to create the lockfile in the first place. They may need to build proper support for running actions locally -- there is the third-party <a href="https:&#x2F;&#x2F;github.com&#x2F;nektos&#x2F;act" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;nektos&#x2F;act</a> tool which might be a starting point, but that&#x27;s mostly designed so you can debug actions without having to repeatedly push and rerun. Probably they&#x27;ll need a separate mechanism to statically analyze actions without running them.
  • dwroberts12 hours ago
    Pleased this is being discussed somewhere as it’s something that has troubled me for a while.<p>There are so many third party actions where the docs or example reference the master branch. A quick malicious push and they can presumably exfiltrate data from a ton of repositories<p>(Even an explicit tag is vulnerable because it can just be moved still, but master branch feels like not even trying)
  • amluto11 hours ago
    &gt; The researchers identified four fundamental security properties that CI&#x2F;CD systems need: admittance control, execution control, code control, and access to secrets.<p>Why do CI&#x2F;CD systems need access to secrets? I would argue need access to APIs and they need privileges to perform specific API calls. But there is absolutely nothing about calling an API that fundamentally requires that the caller know a secret.<p>I would argue that a good CI&#x2F;CD system should not support secrets as a first-class object at all. Instead steps may have privileges assigned. At most there should be an adapter, secure enclave style, that may hold a secret and give CI&#x2F;CD steps the ability to do something with that secret, to be used for APIs that don’t support OIDC or some other mechanism to avoid secrets entirely.
    • woodruffw7 hours ago
      &gt; I would argue that a good CI&#x2F;CD system should not support secrets as a first-class object at all. Instead steps may have privileges assigned. At most there should be an adapter, secure enclave style, that may hold a secret and give CI&#x2F;CD steps the ability to do something with that secret, to be used for APIs that don’t support OIDC or some other mechanism to avoid secrets entirely.<p>This all seems right, but the reality is that people <i>will</i> put secrets into CI&#x2F;CD, and so the platform should provide an at least passably secure mechanism for them.<p>(A key example being open source: people <i>want</i> to publish from CI, and they’re not going to set up additional infrastructure when the point of using third-party CI is to avoid that setup.)
    • gcr8 hours ago
      “Good CI systems shouldn’t support secrets, at most there should be [the most complicated secret support ever]”<p>Let’s just call it secret support.<p>I agree with your suggestion that capabilities-based APIs are better, but CI&#x2F;CD needs to meet customers where they’re at currently, not where they should be. Most customers need secrets.
    • qznc10 hours ago
      We use proprietary tools (QNX compiler, Coverity static analysis, ...) and those require access to a license server which requires some secret.<p>I don&#x27;t really understand what you mean by &quot;secure enclave style&quot;? How would that be different?
      • amluto9 hours ago
        With a secure enclave or an HSM, there&#x27;s a secret, but the users do not have access to the secret. So, if you have a workflow that needs to, say, sign with a given private key, you would get an API that signs for you. If you need to open a TLS connection with a client certificate, you get a proxy that authenticates for you.<p>I suppose I would make an exception for license keys. Those have minimal blast radii if they leak.
        • gcr8 hours ago
          And how is that exposed to the CI&#x2F;CD? An environment variable? Some bespoke tool that the CI runs to read the secret from the Secure Enclave?<p>Your approach boils down to “lets give each step its own access to its own hardware-protected secrets, but developers shouldn’t otherwise have access”<p>Which is a great way to “support secrets,” just like the article says.
    • PunchyHamster11 hours ago
      &gt; I would argue that a good CI&#x2F;CD system should not support secrets as a first-class object at all. Instead steps may have privileges assigned. At most there should be an adapter, secure enclave style, that may hold a secret and give CI&#x2F;CD steps the ability to do something with that secret, to be used for APIs that don’t support OIDC or some other mechanism to avoid secrets entirely.<p>CI&#x2F;CD does not exist in the vacuum. If you had CI&#x2F;CD entirely integrated with the rest of the infrastructure it might be possible to do say an app deploy without passing creds to user code (say have the platform APIs that it can call to do the deployment instead of typical &quot;install the client, get the creds, run k8s&#x2F;ssh&#x2F;whatever else needed for deploy&quot;).<p>But that&#x27;s a high level of integration that&#x27;s very environment specific, and without all that many positives (so what you don&#x27;t need creds, you still have permission to do a lot of mess if it gets hijacked), and a lot, lot more code to write vs &quot;run a container and pass it some env vars&quot; that had become a standard
      • amluto9 hours ago
        You seem to be talking mostly about the CD part. Some thoughts:<p>On the one hand, CD workflows are less exposed than CI workflows. You only deploy code that has made it through your review and CI processes. In a non-continuous deployment model, you only deploy code when you decide to. You are not running your CD workflow on a third-party pull request.<p>On the other hand, the actual CD permission is a big deal. If you leak a credential that can deploy to your k8s cluster, you are very, very pwned. Possibly in a manner that is extremely complex to recover from.<p>I also admit that I find it rather surprising that so many workflows have a push model of deployment like this. My intuition for how to design a CD-style system would be:<p>1. A release is tagged in source control.<p>2. Something consumes that release tag and produces a production artifact. This might be some sort of runner that checks out the tagged release, builds it, and produces a ghcr image. Bonus points if that process is cleanly reproducible and more bonus points if there&#x27;s also an attestation that the release artifact matches the specified tag and all the build environment inputs. (I think that GitHub Actions can do this, other than the bonus points, without any secrets.)<p>3. Something tells production to update to the new artifact. Ideally this would trigger some kind of staged deployment. Maybe it&#x27;s continuous, maybe it needs manual triggering. I think that, in many production systems, this could be a message from the earlier stages that tells an agent with production privileges to download and update. It really shouldn&#x27;t be that hard to make a little agent in k8s or whatever that listens to an API call from a system like GitHub Actions, authenticates it using OIDC, and follows its deployment instructions.<p>P.S. An attested-reproducible CD build system might be an interesting startup idea.
        • PunchyHamster8 hours ago
          Well, in my mind the build system should build an artifact (a container, or a .deb package), and then the separate system should deploy it (with smaller amount of permitted people), and have option to roll it back. So in principle I agree on that .<p>...but I saw that anti-pattern of &quot;just add a step that does the deploy after CI in same&quot; often enough that I think it might be the most common way to do it.
      • Kinrany11 hours ago
        CI shouldn&#x27;t do deployments, deployment pipelines should run separately when a new release passes CI<p>Of course the general purpose task runner that both run on does need to support secrets
        • arccy11 hours ago
          you conveniently ignored the &quot;CD&quot; part of CI&#x2F;CD
          • Kinrany6 hours ago
            As mentioned by sibling comments, these two parts are very different. GHA and alternatives are primarily for CI; many people choose to use it solely for CI. For these reasons I did ignore CD.
        • regularfry11 hours ago
          We&#x27;re iterating towards GHA for CI, AWS CodeBuild for the CD. At least on AWS projects. Mainly because managing IAM permissions to permit the github runner to do everything the deployment wants is an astonishingly large waste of time. But you need <i>a</i> secret to trigger one from the other.
          • jamescrowley10 hours ago
            You actually don’t need (long-lived &#x2F; hard-coded) secrets in this scenario if you use OIDC:<p><a href="https:&#x2F;&#x2F;docs.github.com&#x2F;en&#x2F;actions&#x2F;how-tos&#x2F;secure-your-work&#x2F;security-harden-deployments&#x2F;oidc-in-aws" rel="nofollow">https:&#x2F;&#x2F;docs.github.com&#x2F;en&#x2F;actions&#x2F;how-tos&#x2F;secure-your-work&#x2F;...</a>
            • regularfry7 hours ago
              Technically yes. It depends on whether you consider the account ID to be a secret or not (AWS say &quot;sensitive but not secret&quot; which doesn&#x27;t help much). But also it can make sense to treat all environment variables as secrets by default just so you don&#x27;t accidentally end up putting something somewhere that turns out to have been Wrong.
              • Kinrany6 hours ago
                GP is saying that GHA would need zero information about AWS if CodeBuild used a Github token and listened for GHA runs.
                • regularfry4 hours ago
                  That may be true, but it&#x27;s not what the link describes.
            • everfrustrated8 hours ago
              And even better can scope assuming an AWS IAM role to a specific branch name &amp; workflow filename so only code&#x2F;workflows that have been through review have access to CD secrets&#x2F;prod infra.<p>IE no prod access by editing the workflow definition and pushing it to a branch.
        • Kinrany11 hours ago
          Hmm, I have long assumed that a perfectly executed CI&#x2F;CD setup would be based on a generic task runner... But maybe not?<p>Only the CI part needs to build; it needs little else and it&#x27;s the only part of a coherent setup that needs to build.
    • barrkel11 hours ago
      How do you e.g. validate that a database product works with all the different cloud databases? Every time you change up SQL generation you&#x27;re going to want to make sure the SQL parses and evaluates as expected on all supported platforms.<p>Those tests will need creds to access third party database endpoints.
    • lionkor7 hours ago
      You&#x27;re missing that the D in CI&#x2F;CD means deployment; be that packaging on pushing tags and publishing to a registry, or building images, or packaging github releases.
    • hinkley11 hours ago
      CI is arguable, but how do you intend to do deployments with no secrets?
      • themafia11 hours ago
        AWS is great for this. IAM policies can allow IP Addresses or more safely just named EC2 instances. Our deploy server requires nothing.
        • nijave8 hours ago
          CircleCI and I believe GHA support injecting signed JWTs you can use to bootstrap identity be it an IAM role or some other platform where you can trust an OIDC issuer
          • hinkley2 hours ago
            &gt; injecting signed JWTs<p>How is that not secrets management?
      • gcr8 hours ago
        The secret is held by the metadata server that the CI instance has access to<p>Or: the deployment service knows the identity of the instance, so its secret is its private key<p>Or, how PyPI does it: the deployment service coordinates with the trusted CI&#x2F;CD service to learn the identity of the machine (like its IP address, or a trusted assertion of which repository it’s running on), so the secret is handled in however that out-of-band verification step happens. (PyPI communicates with Github Actions about which pipeline from which repository is doing the deployment, for example)<p>It’s still just secrets all the way down
        • mrweasel6 hours ago
          &gt; The secret is held by the metadata server that the CI instance has access to<p>But how does the metadata server know that the CI instance is allowed to access the secret? Especially when the CI&#x2F;CD system is hosted at a 3rd. party. It needs to present some form of credentials. The CI system may also need permission or credentials for a private repository of packages or artifacts needed in the build process.<p>For me, a CI&#x2F;CD system needs two things: Secret management and the ability to run Bash.
          • hinkley2 hours ago
            It would be good if it could also scan build output like code coverage and test results. But that’s about all it should do.<p>I keep meaning to write a partially federated CI tool that uses Prometheus for all of its telemetry data but never get around to it. I ended up carving out a couple other things I’d like to be part of the process as a separate app because I was still getting panopticon vibes and some data should just be private.
          • gcr5 hours ago
            Yeah I was confused about that bit too. AWS and GCP&#x27;s metadata servers know which instances were deployed, so they presumably have some way of verifying the instance&#x27;s identity out-of-band, such as being tagged by an internal job or machine identifier.<p>As for deploying from a trusted service without managing credentials, PyPI calls this &quot;trusted publishing&quot;: <a href="https:&#x2F;&#x2F;docs.pypi.org&#x2F;trusted-publishers&#x2F;" rel="nofollow">https:&#x2F;&#x2F;docs.pypi.org&#x2F;trusted-publishers&#x2F;</a><p>From the docs:<p>1. Certain CI services (like GitHub Actions) are OIDC identity providers, meaning that they can issue short-lived credentials (&quot;OIDC tokens&quot;) that a third party can strongly verify came from the CI service (as well as which user, repository, etc. actually executed);<p>2. Projects on PyPI can be configured to trust a particular configuration on a particular CI service, making that configuration an OIDC publisher for that project;<p>3. Release automation (like GitHub Actions) can submit an OIDC token to PyPI. The token will be matched against configurations trusted by different projects; if any projects trust the token&#x27;s configuration, then PyPI will mint a short-lived API token for those projects and return it;<p>4. The short-lived API token behaves exactly like a normal project-scoped API token, except that it&#x27;s only valid for 15 minutes from time of creation (enough time for the CI to use it to upload packages).<p>You have to add your github repository as a &quot;trusted pulbisher&quot; to your PyPI packages.<p>Honetsly the whole workflow bothers me -- how can PyPI be sure it&#x27;s talking to github? what if an attacker could mess with PyPI&#x27;s DNS? -- but it&#x27;s how it&#x27;s done.
        • hinkley2 hours ago
          That is secret management.
          • gcr2 hours ago
            Yes, that&#x27;s what I&#x27;m saying. I&#x27;m agreeing with your response to amluto.
    • duped23 minutes ago
      &gt; Why do CI&#x2F;CD systems need access to secrets?<p>Because you need to be able to sign&#x2F;notarize with private keys and deploy to cloud environments. Both of these require secrets known to the runner.
    • zahlman11 hours ago
      &gt; But there is absolutely nothing about calling an API that fundamentally requires that the caller know a secret.<p>There is if you pay for API access, surely?
    • nijave8 hours ago
      While good in theory, in practice secrets are used to validate those privileges have been assigned. Even in schemes like metadata servers, you still use a secret.<p>Pedantically I&#x27;d say maybe it&#x27;s more fair to say they shouldn&#x27;t have access to long lived secrets and should only use short lived values.<p>The &quot;I&quot; stands for Integration so it&#x27;s inevitable CI needs to talk to multiple things--at the very least a git repo which most cases requires a secret to pull.
    • LtWorf7 hours ago
      Because for some reason they use the same system to do releases and sign them and publish them.
    • cyberax11 hours ago
      You might want (or _need_) to sign your binary, for example. Or you might want to trigger a deployment.<p>Github actually is doing something right here. You can set it up as a trusted identity provider in AWS, and then use Github to assume a role in your AWS account. And from there, you can get access to credentials stored in Secret Manager or SSM.
      • jdeastwood11 hours ago
        Yes, their oidc setup was probably their last good feature back when they were actually delivering features back in 2020ish. Everyone else copied it within a few months though.
        • sofixa6 hours ago
          Who is everyone? As with pretty much every GitHub feature, GitLab had them beat by a few years.
      • DuncanCoffee11 hours ago
        Yeah I sign my project APKs so people can install them from the action&#x27;s artefact<p><pre><code> - name: Retrieve keystore for apk signing env: KEYSTORE: ${{ secrets.KEYSTORE }} run: echo &quot;$KEYSTORE&quot; | base64 --decode &gt; &#x2F;home&#x2F;runner&#x2F;work&#x2F;keystore.pfk</code></pre>
  • OptionOfT6 hours ago
    The container manager is horrible.<p>When you have a multi-platform image the actual per-platforms are usually not tagged. No point.<p>But that doesn&#x27;t mean that they are untagged.<p>So on GitHub Actions when you upload a multi-platform image the per-platform show up in the untagged list. And you can delete them, breaking the multi-platform image, as now it points to blobs that don&#x27;t exist anymore.
  • bluenose6910 hours ago
    I agree 100% with what I think is the key phrase, viz. &quot;the results can change without any modification to your code&quot;.<p>I maintain an R package that is quite stable and is widely used. But every month or so, the GHA on one of the R testing machines will report an error. The messages being quite opaque, I typically spend a half hour trying to see if my code is doing something wrong. And then I simply make a calendar item to recheck it each day for a while. Sure enough, the problems always go away after a few days.<p>This might be specific to R, though.
  • Raed66711 hours ago
    To get something of a lockfile you can use the hash of the version you want to pin your dependencies:<p>&gt; actions&#x2F;checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744
    • cyphar7 hours ago
      TFA mentions this option and then goes on at some length to explain that this doesn&#x27;t help for transitive dependencies, which is how these attacks usually work.
    • barrkel11 hours ago
      Transitive dependencies?
      • Kovah9 hours ago
        Yeah, only works if all used Actions would use SHAs too, which is not the case.<p>Positive example: <a href="https:&#x2F;&#x2F;github.com&#x2F;codecov&#x2F;codecov-action&#x2F;blob&#x2F;96b38e9e60ee60a8c3911f4612407bba2f9195fb&#x2F;action.yml#L233" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;codecov&#x2F;codecov-action&#x2F;blob&#x2F;96b38e9e60ee6...</a> Negative example: <a href="https:&#x2F;&#x2F;github.com&#x2F;armbian&#x2F;build&#x2F;blob&#x2F;54808ecff253fb71615161e3a216ad14b420022b&#x2F;action.yml#L101" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;armbian&#x2F;build&#x2F;blob&#x2F;54808ecff253fb71615161...</a>
  • jnwatson6 hours ago
    I committed the project I maintain to GitHub Actions when Actions first came out, and I&#x27;m really starting to regret it.<p>The main problem, which this article touches, is that GHA adds a whole new dimension of dependency treadmill. You now have a new set of upstreams that you have to keep up to date along with your actual deployment upstreams.
  • figmert6 hours ago
    A lot of the actions people tend to use are just unnecessary. They&#x27;re simple wrappers around real tools. In those cases, use mise-en-place. It&#x27;s a single action that installs all relevant tools (and keeps your local dev env in check), and it supports lock files.
    • akvadrako13 minutes ago
      And if not mise, just a Makefile, shell scripts or custom docker images. Then you can run and develop them locally.<p>GitHub actions has some rough edges around caching, but all the packaging is totally unimportant and best avoided.
    • RSHEPP4 hours ago
      This right here - I am migrating all of our GHA to use the mise action. Makes keeping the version of Go, linters, formatters etc. for the project so much easier. Haven&#x27;t added the mise.lock yet, but on the list. Now getting my small team of devs to try using mise is much harder.
  • nine_k3 hours ago
    GitHub has been showing its limitations for quite some time now, and this gives a chance to alternative code forges to rise to prominence.<p>I hope that Codeberg will become more mainstream for FOSS projects.<p>I hope another competent player, beside GitLab and Bitbucket, will emerge in the corporate paid space.
  • worldsayshi10 hours ago
    I&#x27;ve not understood the propensity for using yaml for CI pipelines and workflows in general. A decent programming language would be a big improvement.<p>Why not just build the workflows themselves as docker images? I guess running other docker images in the workflow would then become a problem.
    • shepherdjerred56 minutes ago
      Dagger does what you&#x27;re describing: <a href="https:&#x2F;&#x2F;dagger.io&#x2F;" rel="nofollow">https:&#x2F;&#x2F;dagger.io&#x2F;</a>
    • sofixa6 hours ago
      &gt; I&#x27;ve not understood the propensity for using yaml for CI pipelines and workflows in general. A decent programming language would be a big improvement.<p>Because it&#x27;s clear to write and read. You don&#x27;t want your CI&#x2F;CD logic to end up being spaghetti because a super ninja engineer decided they can do crazy stuff just because they can. Same reason why it&#x27;s a bad idea to create your infrastructure directly in a programming language (unless creating infrastructure is a core part of your software).<p>&gt; Why not just build the workflows themselves as docker images? I guess running other docker images in the workflow would then become a problem.<p>That&#x27;s how Drone CI handled it. GitLab kind of does the same, where you always start as a docker image, and thus if you have a custom one with an entrypoint, it does whatever you need it to.
    • trueno10 hours ago
      it&#x27;s wild I can wiz through a ton of code for hours on end but seeing a yaml file for something like a CI pipeline actually makes my brain eject i dunno why. my brain has some sort of proverbial capacity limit with how many different configuration-file looking things I can tolerate in a day, and the prospect of becoming intimately familiar with what is effectively an auto integration presented to me as some sort of config makes me completely unjustifiably butthurt for no reason. have i not suffered enough needless and often times limiting abstractions already
  • btown6 hours ago
    Has anyone built a “deep fork” tool that lets you make a private fork of all dependencies, then modifies their transitive dependencies to point to private forks, and so on? Ideally in a way where updates can be pulled in manually? Seems feasible.
  • Group_B8 hours ago
    I was just writing about how crazy it is to use the third-party ssh tool<p><a href="https:&#x2F;&#x2F;broderic.blog&#x2F;post&#x2F;moving-away-from-netlify&#x2F;" rel="nofollow">https:&#x2F;&#x2F;broderic.blog&#x2F;post&#x2F;moving-away-from-netlify&#x2F;</a>
  • pshirshov9 hours ago
    Run Nix atop of Actions, minimize the amount of actions you depend on. That works. As a bonus, you now can run your flows locally too.<p>I have a little launcher for that which helps: <a href="https:&#x2F;&#x2F;github.com&#x2F;7mind&#x2F;mudyla" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;7mind&#x2F;mudyla</a>
  • carschno7 hours ago
    It is concerning that GitHub hosts the majority of open-source software, while actively locking its users into a platform that is based on closed source for eerything except Git itself. This issue with Actions shows how maintaining proprietary software inevitably ends up rather low on the priority list. Adding new features is much more marketable, just like for any other software product. Enshittification ensues.<p>For those who can still escape the lock-in, this is probably a good occasion to point to Forgejo, an open-source alternative that also has CI actions: <a href="https:&#x2F;&#x2F;forgejo.org&#x2F;2023-02-27-forgejo-actions&#x2F;" rel="nofollow">https:&#x2F;&#x2F;forgejo.org&#x2F;2023-02-27-forgejo-actions&#x2F;</a> It is used by Codeberg: <a href="https:&#x2F;&#x2F;codeberg.org&#x2F;" rel="nofollow">https:&#x2F;&#x2F;codeberg.org&#x2F;</a>
    • mfenniak7 hours ago
      On the plus side, Forgejo Action&#x27;s implementation is still actively improving, where it seems that for GitHub if it&#x27;s not AI, it&#x27;s not being touched.<p>However, as noted in the article, Forgejo&#x27;s implementation currently has all the same &quot;package manager&quot; problems.
      • carschno7 hours ago
        Good point, also to illustrate that open-source is not a panacea. It merely holds a higher potential for certain issues to be fixed&#x2F;improved than.
  • asmor9 hours ago
    See also this excellent video essay by fasterthanlime: GitHub Actions Feels Bad[1].<p>I&#x27;m pretty sure it contains the exact line of it being &quot;deeply confused about being a package manager&quot;.<p>[1]: <a href="https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=9qljpi5jiMQ" rel="nofollow">https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=9qljpi5jiMQ</a>
  • tom133710 hours ago
    We are currently using GitHub Actions for all our CI tasks and I hate it. Yes, the marketplace is nice and there are a lot of utility actions which make life easier, but they all come with the issues the post highlights. Additionally, testing Actions locally is a nightmare. I know that act exists but for us it wasn&#x27;t working most of the time. Also the whole environment management is kinda odd to me and the fact, that when using an environment (which then allows to access secrets set in that environment) it always creates a new deployment is just annoying [1]<p>I guess the best solution is to just write custom scripts in whatever language one prefers and just call those from the CI runner. Probably missing out on some fancy user interfaces but at least we&#x27;d no longer be completely locked into GHA...<p>[1] <a href="https:&#x2F;&#x2F;github.com&#x2F;orgs&#x2F;community&#x2F;discussions&#x2F;36919" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;orgs&#x2F;community&#x2F;discussions&#x2F;36919</a>
  • cyberax11 hours ago
    Yep. I&#x27;m switching our workflows to instead use regular utilities running inside a Docker container.<p>This works well for _most_ things. There are some issues with doing docker-in-docker for volume mapping, but they&#x27;re mostly trivial. We&#x27;re using taskfiles to run tasks, so I can just rely on it for that. It also has a built-in support for nice output grouping ( <a href="https:&#x2F;&#x2F;taskfile.dev&#x2F;docs&#x2F;reference&#x2F;schema#output" rel="nofollow">https:&#x2F;&#x2F;taskfile.dev&#x2F;docs&#x2F;reference&#x2F;schema#output</a> ) that Github actions can parse.<p>Pros:<p>1. Ability to run things in parallel.<p>2. Ability to run things _locally_ in a completely identical environment.<p>3. It&#x27;s actually faster!<p>4. No vendor lock-in. Offramp to github runners and eventually local runners?<p>Cons:<p>It often takes quite a while to understand how actions work when you want to run them in your own environment. For example, how do you get credentials to access the Github Actions cache and then pass them to Docker? Most of documentation just tells: &quot;Use this Github Action and stop worrying your pretty little head about it&quot;.
    • battesonb11 hours ago
      Do you have a write up about this? Actions are great, but my #2 gripe with actions, after the tenuous security posture, is that the default practice is not to run&#x2F;validate actions locally.
      • cyberax3 hours ago
        I don&#x27;t. Will do soon.
  • curcbit6 hours ago
    microsoft never changes
  • IshKebab8 hours ago
    &gt; The core problem is the lack of a lockfile. Every other package manager figured this out decades ago<p>Well... not Pip!
    • thangngoc898 hours ago
      I would recommend you to try uv for this.
  • LoganDark11 hours ago
    I checked out the linked GitHub repo <a href="https:&#x2F;&#x2F;github.com&#x2F;ecosyste-ms&#x2F;package-manager-resolvers" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;ecosyste-ms&#x2F;package-manager-resolvers</a> and it appears to be just a README.md that collects summaries of different package managers? How do I know these weren&#x27;t just LLM-generated?
    • regularfry11 hours ago
      You don&#x27;t, but that&#x27;s the wrong question. How do you know they&#x27;re accurate?
  • ignoramous10 hours ago
    &gt; <i>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.</i><p>Harsh given GitHub makes it very easy to setup attestations for Artifact (like build &amp; sbom) provenances.<p>That said, Zizmor (static analyser for GitHub Actions) with Step Security&#x27;s <i>Harden Runner</i> (a runtime analyser) [0] pair nicely, even if the latter is a bit of an involved setup.<p>[0] <a href="https:&#x2F;&#x2F;github.com&#x2F;step-security&#x2F;harden-runner" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;step-security&#x2F;harden-runner</a><p>&gt; <i>The fix is a lockfile.</i><p>Hopefully, SLSA drafts in Hermetic build process as a requirement: <a href="https:&#x2F;&#x2F;slsa.dev&#x2F;spec&#x2F;v1.2&#x2F;future-directions" rel="nofollow">https:&#x2F;&#x2F;slsa.dev&#x2F;spec&#x2F;v1.2&#x2F;future-directions</a>
    • woodruffw7 hours ago
      I’d say that GitHub has done an admirable job making attestations more accessible, but that “easy” is still a stretch of a characterization: it’s still not the default, and the error&#x2F;configuration states are somewhat opaque (e.g. around OIDC permissions, unprivileged triggers, what constitutes a signing identity in a reusable workflow context, etc.). Some of these are latent complexities that GitHub can’t be blamed for, but some are certainly made worse by architectural decisions in GitHub Actions.
  • TrianguloY11 hours ago
    I&#x27;m not sure I follow.<p>If I write actions&#x2F;setup-python@v1, I&#x27;m expecting the action to run with the v1 tag of that repository. If I rerun it, I expect it to run with the v1 tag of that repository...which I&#x27;m aware may not be the same if the tag was updated.<p>If I instead use actions&#x2F;setup-python@27b31702a0e7fc50959f5ad993c78deac1bdfc29 then I&#x27;m expecting the action to run with that specific commit. And if I run it again it will run with the same commit.<p>So, whether you choose the tag or the commit depends on whether you trust the repository or not, and if you want automatic updates. The option is there...isn&#x27;t it?
    • barrkel11 hours ago
      You specifying the top level hash doesn&#x27;t do anything to pin transitive dependencies, and as the article points out, transitive dependencies - especially dependencies common to a lot of actions - would be the juciest target for a supply chain attack.
    • eviks9 hours ago
      &gt; which I&#x27;m aware may not be the same if the tag was updated.<p>That&#x27;s the mistake that breaks the following. People don&#x27;t usually expect that it&#x27;s an arbitrary modifiable reference, but instead that it&#x27;s the same version they&#x27;ve picked when they created the file (ie a tag is just a human friendly name for a commit)