GitHub Actions

Automate your workflowfromideatoproduction

GitHub Actions makes it easy to automate all your software workflows, now with world-class CI/CD. Build, test, and deploy your code right from GitHub. Make code reviews, branch management, and issue triaging work the way you want.

Run a workflowon any GitHub event

Kick off workflows with GitHub events like push, issue creation, or a new release. Combine and configure actions for the services you use, built and maintained by the community.

Whether you want to build a container, deploy a web service, or automate welcoming new users to your open source projects—there's an action for that. Pair GitHub Packages with Actions to simplify package management, including version updates, fast distribution with our global CDN, and dependency resolution, using your existing GITHUB_TOKEN.

on: milestone

on: issue_comment

on: check_run

on: deployment

on: label

on: project_card

on: pull_request_comment

on: release

on: repository_vulnerability_alert

on: milestone

on: public

on: repository_dispatch

on: issue_comment

on: fork

on: deployment_status

on: page_build

on: watch

on: pull_request

on: delete

on: issue_comment

on: issues

on: check_suite

on: scheduled

on: pull_request_review

on: project_column

on: status

on: project

on: pull_request

on: delete

on: issue_comment

on: push

on: page_build

on: watch

Linux, macOS, Windows, ARM, and containers

Hosted runners for every major OS make it easy to build and test all your projects. Run directly on a VM or inside a container. Use your own VMs, in the cloud or on-prem, with self-hosted runners.

Matrix builds

Save time with matrix workflows that simultaneously test across multiple operating systems and versions of your runtime.

Any language

error-pages
GET /
✓ should respond with page list
Accept: text/html
GET /403
✓ should respond with 403
GET /404
✓ should respond with 404
GET /500
✓ should respond with 500
Accept: application/json
GET /403
✓ should respond with 403
GET /404
✓ should respond with 404
GET /500
✓ should respond with 500
Accept: text/plain
GET /403
✓ should respond with 403
GET /404
✓ should respond with 404
GET /500
✓ should respond with 500
error
GET /
✓ should respond with 500
GET /next
✓ should respond with 500
GET /missing
✓ should respond with 404
markdown
GET /
✓ should respond with html
GET /fail
✓ should respond with an error
multi-router
GET /
✓ should respond with root handler
GET /api/v1/
✓ should respond with APIv1 root handler
GET /api/v1/users
✓ should respond with users from APIv1
GET /api/v2/
✓ should respond with APIv2 root handler
GET /api/v2/users
✓ should respond with users from APIv2
mvc
GET /
✓ should redirect to /users
GET /pet/0
✓ should get pet
GET /pet/0/edit
✓ should get pet edit page
PUT /pet/2
✓ should update the pet
GET /users
✓ should display a list of users (70ms)
GET /user/:id
when present
✓ should display the user
✓ should display the users pets
when not present
✓ should 404
GET /user/:id/edit
✓ should display the edit form
PUT /user/:id
✓ should 500 on error
✓ should update the user
POST /user/:id/pet
✓ should create a pet for user (19ms)
params
GET /
✓ should respond with instructions
GET /user/0
✓ should respond with a user
GET /user/9
✓ should fail to find user
GET /users/0-2
✓ should respond with three users
GET /users/foo-bar
✓ should fail integer parsing
resource
GET /
✓ should respond with instructions
GET /users
✓ should respond with all users
GET /users/1
✓ should respond with user 1
GET /users/9
✓ should respond with error
GET /users/1..3
✓ should respond with users 1 through 3
DELETE /users/1
✓ should delete user 1
DELETE /users/9
✓ should fail
GET /users/1..3.json
✓ should respond with users 2 and 3 as json
route-map
GET /users
✓ should respond with users
DELETE /users
✓ should delete users
GET /users/:id
✓ should get a user
GET /users/:id/pets
✓ should get a users pets
GET /users/:id/pets/:pid
✓ should get a users pet
route-separation
GET /
✓ should respond with index
GET /users
✓ should list users
GET /user/:id
✓ should get a user
✓ should 404 on missing user
GET /user/:id/view
✓ should get a user
✓ should 404 on missing user (13ms)
GET /user/:id/edit
✓ should get a user to edit
PUT /user/:id/edit
✓ should edit a user
POST /user/:id/edit?_method=PUT
✓ should edit a user
GET /posts
✓ should get a list of posts
vhost
example.com
GET /
✓ should say hello
GET /foo
✓ should say foo
foo.example.com
GET /
✓ should redirect to /foo
bar.example.com
GET /
✓ should redirect to /bar
web-service
GET /api/users
without an api key
✓ should respond with 400 bad request
with an invalid api key
✓ should respond with 401 unauthorized
with a valid api key
✓ should respond users json
GET /api/repos
without an api key
✓ should respond with 400 bad request
with an invalid api key
✓ should respond with 401 unauthorized
with a valid api key
✓ should respond repos json
GET /api/user/:name/repos
without an api key
✓ should respond with 400 bad request
with an invalid api key
✓ should respond with 401 unauthorized
with a valid api key
✓ should respond user repos json
✓ should 404 with unknown user
when requesting an invalid route
✓ should respond with 404 json
1123 passing (4s)
=============================================================================
Writing coverage object [/home/runner/build/expressjs/express/coverage/coverage.json]
Writing coverage reports at [/home/runner/build/expressjs/express/coverage]
=============================================================================
=============================== Coverage summary ===============================
Statements : 98.81% ( 1916/1939 ), 38 ignored
Branches : 94.58% ( 751/794 ), 22 ignored
Functions : 100% ( 267/267 )
Lines : 100% ( 1872/1872 )
================================================================================
The command "npm run test-ci" exited with 0.
$ npm run lint
> express@4.17.1 lint /home/runner/build/expressjs/express
> eslint .
The command "npm run lint" exited with 0.
store build cache
$ # Upload coverage to coveralls
Done. Your build exited with 0.

Live logs

See your workflow run in realtime with color and emoji. It’s one click to copy a link that highlights a specific line number to share a CI/CD failure.

Built in secret store

Automate your software development practices with workflow files embracing the Git flow by codifying it in your repository.

Multi-container testing

Test your web service and its DB in your workflow by simply adding some docker-compose to your workflow file.

Community-powered workflows

GitHub Actions connects all of your tools to automate every step of your development workflow. Easily deploy to any cloud, create tickets in Jira, or publish a package to npm.

Want to venture off the beaten path? Use the millions of open source libraries available on GitHub to create your own actions. Write them in JavaScript or create a container Action—both can interact with the full GitHub API and any other public API.

What our community is saying

“Custom scripts and bespoke systems prevented many of our users from fully realizing the benefits of CI/CD. GitHub Actions gave us a platform to deliver intelligent pipelines with minimal up-front investment and no ongoing maintenance.”

Dan Belcher

mabl Co-Founder

“With GitHub Actions, we can define our CI/CD workflows concisely in code, standardize them across thousands of repositories, and evolve them collaboratively with pull-requests. The solution improves the developer experience and boosts productivity for teams, while simplifying and strengthening controls in the software development lifecycle.”

Mike Dargan

Group Head of Technology

“For open source projects, the lower the infrastructure friction we have, the easier it becomes to work with external contributors. Using GitHub Actions for CI and common tasks like triaging issues allows us to lower the barriers even more, so we can focus on writing a good product.”

Maël Nison

Yarn maintainer

“With GitHub Actions, we get an excellent SaaS-based CI/CD solution that integrates seamlessly into GitHub and will soon allow us to run selected workloads on-premise through self-hosted runners across operating systems.”

Ingo Sauerzapf

Software Development Manager, CI/CD

Simple, pay-as-you-go pricing

Public repositories

Free

We love open source

Private repositories

Included minutes

Free

2,000

minutes per month

Pro

3,000

minutes per month

Team

3,000

minutes per month

Enterprise

50,000

minutes per month

Additional hosted runner minutes

Linux

2 cores, 7GB

$0.008

per minute

Windows

2 cores, 7GB

$0.016

per minute

macOS

2 cores, 7GB

$0.08

per minute

Self-hosted

Free

Included, hosted runner minutes are consumed at different rates for each operating system. GitHub Actions is not available for private repos in legacy per-repository plans. Learn more