What this converter does
Paste a .travis.yml and you get a GitHub Actions workflow plus a list of everything that did not map cleanly. The implicit build matrix (os × language versions × env) becomes strategy.matrix, jobs.include entries become their own jobs, and build stages become sequential groups. Conversion runs entirely in your browser; nothing is uploaded.
Anything without a clean equivalent becomes a TODO step that fails loudly with the original quoted.
How Travis CI concepts map to GitHub Actions
| Travis CI | GitHub Actions | Notes |
|---|---|---|
language: + version list | actions/setup-* in a matrix | node_js, python, ruby, go, java, php, rust, elixir, dart, csharp, haskell, perl, scala, c/cpp. |
os: / dist: | runs-on matrix | jammy → ubuntu-22.04, osx → macos-latest, windows → windows-latest. |
env: matrix / global | strategy.matrix / env: | secure: values become notes to create secrets. |
jobs.include / exclude / allow_failures / fast_finish | extra jobs, removed legs, continue-on-error, fail-fast | |
stages: | job groups chained with needs | Stage if: conditions applied. |
before_install, install, before_script, script | steps in order | Language defaults emitted when install/script are missing. |
after_success / after_failure / after_script | steps with if: success() / failure() / always() | |
services: (postgresql, mysql, redis, mongodb …) | services: containers | Linux jobs only; default ports published. |
addons: apt / homebrew / snaps / sonarcloud | install steps or actions | Chrome and Firefox are preinstalled. |
cache: | actions/cache | Presets and directories. |
branches: only / except | on.push.branches | Regexes approximated as globs. |
if: conditions | if: | branch, tag IS present, type, env(), repo, fork, AND/OR/NOT. |
deploy: pages / npm / releases / pypi / rubygems / heroku / s3 / firebase / script | matching actions or run: | Other providers become TODOs. |
$TRAVIS_BRANCH, $TRAVIS_TAG, $TRAVIS_OS_NAME … | env: shim | Used variables are defined from the github context. |
Things to check by hand
- Encrypted variables cannot be decrypted; recreate each as a repository secret.
- Database credentials differ: Travis services used passwordless defaults, the containers here allow empty passwords or trust auth. Check
env. - Deploy providers need
permissions:(contents: writefor Pages and Releases).
FAQ
Is my file uploaded anywhere?
No. The converter runs in your tab. Read travis.js on GitHub.
Can I run this from the command line?
Yes: npx jenkins-to-actions convert .travis.yml.
Migrating a whole organisation?
The same converters ship as a command-line audit. Point it at a GitHub organisation, a GitLab group, an Azure DevOps organisation, a Bitbucket workspace or a Jenkins server and it inventories every CI configuration it finds, converts what it can, estimates the effort per repository and lists the secrets to create. With --open-prs it opens a pull request in each GitHub repository with the workflow and the notes. Nothing is sent anywhere except the platform you point it at.
GITHUB_TOKEN=… npx jenkins-to-actions audit --github-org acme # report + workflows GITHUB_TOKEN=… npx jenkins-to-actions audit --github-org acme --open-prs # one PR per repository GITLAB_TOKEN=… npx jenkins-to-actions audit --gitlab-group acme/platform AZURE_DEVOPS_TOKEN=… npx jenkins-to-actions audit --azure-org acme npx jenkins-to-actions audit --bitbucket-workspace acme --user me --token APP_PASSWORD npx jenkins-to-actions audit --url https://jenkins.example.com --user me --token APITOKEN
See a real result: this pull request was opened by one command on a repository holding one config per system. The README has the details, and the migration page describes the fixed-fee audit if you would rather have it done for you. Once you are on Actions, the cost calculator and the free CI Cost Report action show what the minutes cost.