github-actions

  • A trigger matrix, drawn once, on paper

    An afternoon spent working out what actually runs when, which nobody had ever done. A matrix of six jobs and four triggers is twenty-four cells and nobody had…

  • Five workflow files becoming one

    Four years of adding a workflow per concern, consolidated into one file with jobs. The concurrency model and the permissions become expressible once everything is in one file,…

  • A pipeline described in one file, after four years of five

    Five workflow files, two composite actions, and nobody able to say what runs when. A change that needed editing three files, one of them wrong.

  • Writing a PHPUnit extension

    turkerdev/phpunit-json-coverage-report, and a coverage report a machine can read. Coverage as a percentage in a log, and no way to ask which paths changed.

  • The runner that was larger than the job needed

    An eight-core runner assigned to a job that is network-bound, at four times the cost for no gain. A larger runner was applied to every job when it…

  • An action pinned by digest, and the bot that reads the tag

    Third-party actions pinned to a commit, and a bump pull request that a human can actually review. The bundled dist file being unreviewable is the honest part of…

  • A composite action that grew an input too many

    A shared setup action across four repositories, with eleven inputs, of which one repository used a combination nobody had tested. A shared abstraction with per-caller escape hatches is…

  • A test suite that runs on every commit, in ninety seconds

    Four minutes forty is fine and ninety seconds changes behaviour. The threshold below which running the suite stops being a decision.

  • OIDC to a second cloud, and the trust policy I got wrong

    A second provider, a second trust policy, and a subject claim pattern that was broader than intended. The wildcard is the default in every example and it is…

  • The job that ran on every push and needed to run on none

    A workflow job building documentation on every push to every branch, publishing nothing except on the default branch. A conditional inside a job means the job still starts,…