GitHub Actions workflow generator

Choose a language and the versions to test, and get a workflow file for .github/workflows. It checks out your code, sets up the language on each version, installs dependencies, builds and runs the tests.

Separated by commas. Empty uses the default: Node 20, 22; Python 3.12, 3.13; Go 1.23, 1.24; Java 17, 21.
Runner

Save as .github/workflows/ci.yml. The action versions (checkout v4, setup-node v4, setup-python v5, setup-go v5, setup-java v4) were current when this tool was written: check current major versions on each action's GitHub page before you commit.

Runs in your browser: nothing you enter is sent anywhere.

How to use it

  1. Choose the language and list the versions you support.
  2. Set the branches that should run CI on push, the runner, and whether to run on pull requests.
  3. Copy the YAML to .github/workflows/ci.yml and commit it.

Check current versions

Actions are referenced as name@vN. The majors used here are actions/checkout@v4, actions/setup-node@v4, actions/setup-python@v5, actions/setup-go@v5 and actions/setup-java@v4. Newer majors appear over time, so check current major versions on each action’s repository page before you rely on the file.

What you get

The job installs nothing by itself apart from the language: checkout, setup with the matrix version, then run steps. Node runs npm ci, npm run build --if-present and npm test. Python installs requirements.txt and runs pytest. Go builds and tests all packages. Java uses the Temurin distribution and mvn -B verify.

Example

Node with versions 20 and 22 creates two jobs, each calling actions/setup-node@v4 with node-version: ${{ matrix.node-version }} and cache: npm.

Tips

  • Keep the matrix to the versions you really support, since each one costs runner minutes.
  • Add a permissions: block if you want to restrict the default token rights.

Frequently asked questions

Where does the workflow file go?

In your repository at .github/workflows/ci.yml, or any other .yml name in that folder. GitHub runs it on the events listed under on:.

How does the matrix work?

The job runs once for every version you list, in parallel, so a failure on one version shows up on its own. The version is passed to the setup action through the matrix variable.

Why are the versions in quotes?

YAML reads an unquoted 3.10 as the number 3.1, which would select the wrong Python. Quoted values stay text.

What does the cache option need?

For Node, setup-node caching needs a lockfile such as package-lock.json. For Python it needs a requirements file, and for Java a pom.xml. Go caches by default through setup-go, so the option only turns it off.

Do I need to change the commands?

Probably. The defaults are npm ci, npm test, pytest, go test ./... and mvn -B verify. Change them to what your project actually runs.

More in Developer

All tools in this category: Developer ·Updated November 3, 2026

Privacy choices

Google Analytics shows us which tools are used and whether they work. It may set cookies. Your choice is kept in this browser.