How to start using GitHub Actions

Published on
Authors

Installing, setting up, and managing your own continuous integration (CI) and continuous deployment tool (CD) is not an easy task. Luckily you can avoid that by using GitHub Actions. In this post, you will find a brief tutorial of how to easily add Actions to your existing GitHub repository.

GitHub Actions allow you to build, test, and even deploy your code to your servers. You only need to define the workflow creating a new YAML file in your repository under the /.github/workflows/ path using the workflow syntax, that's all.

Workflows

Workflows are triggered by common events (push, pull requests, etc.). If any of those events happen then GitHub will run your workflow automatically. And if you need to run an action periodically the "schedule" event allows you to run scheduled actions using the Cron syntax.

Every workflow has a list of jobs. And every job has a list of steps. Every step can either be a command to be run or the name of an action to use.

Usually workflows have one job, but you can define more than one job and all of them will run in parallel.

Workflow example

This is an example of a "Laravel" workflow. This workflow runs on the master branch after pushing to GitHub or when accepting a Pull Request. It has one job which runs on a Ubuntu virtual machine.

The first step uses the Checkout Action that checks-out the repository. The next steps just run some commands to prepare the framework environment and run the PHPUnit tests.

The path of this file in the repository would be /.github/workflows/laravel.yml

name: Laravel

on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]

jobs:
  laravel-tests:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - name: Copy .env
      run: php -r "file_exists('.env') || copy('.env.example', '.env');"
    - name: Install Dependencies
      run: composer install -q --no-ansi --no-interaction --no-scripts --no-progress --prefer-dist
    - name: Generate key
      run: php artisan key:generate
    - name: Directory Permissions
      run: chmod -R 777 storage bootstrap/cache
    - name: Create Database
      run: |
        mkdir -p database
        touch database/database.sqlite
    - name: Execute tests (Unit and Feature tests) via PHPUnit
      env:
        DB_CONNECTION: sqlite
        DB_DATABASE: database/database.sqlite
      run: vendor/bin/phpunit

If everything works then your build will succeed and you will see an output like this in the "Actions" tab of your repository.

Just click on the triangle icon over any action to expand the output and see the result.

Output of "Execute tests (Unit and Feature tests) via PHPUnit" Action

Checkout is the most basic Action. You can view all the available actions in the GitHub Actions Marketplace. Examples of some useful Actions are:

The best thing about Actions is that if you can't find an Action that suits your needs you can create your own action.

Virtual environments

GitHub Actions are run on a virtual machine with the following resources:

  • 2 Core CPU
  • 7 GB of RAM
  • 14 GB of SSD

In every job definition, the "runs-on" statement sets the virtual environment where the job will be run. These are the currently available virtual environments:

  • Windows Server 2019 (windows-2019)
  • Ubuntu 20.04 (ubuntu-20.04)
  • Ubuntu 18.04 (ubuntu-18.04)
  • Ubuntu 16.04 (ubuntu-16.04)
  • macOS Catalina 10.15 (macos-10.15)

Actions commands are run on that environment, so you can do almost anything you could do on you local machine:

Actions Pricing

GitHub Actions are free for public repositories. For private repositories, you get 2,000 minutes every month for free on the Free plan. If you have the Pro plan or a Team plan you get 3,000 minutes every month.

If at any moment you need more minutes their billing model allows you to purchase additional minutes:

  • $0.008/minute for Linux builds
  • $0.08/minute for macOS builds
  • $0.016/minute for Windows builds

Try Actions now

Now that you have enough information you can add Actions to any of your repositories. You will see how fast and easy is to start using this tool from GitHub and how many advantages you get when you share the same Workflow with your teammates.