2023-02-03

What is GitHub Actions

What is GitHub Actions

GitHub Actions is a powerful automation platform built into GitHub that enables developers to streamline and optimize their software development processes. This flexible tool allows you to create custom workflows that automate repetitive tasks, such as continuous integration (CI), continuous deployment (CD), and testing, directly within your repositories.

GitHub Actions provides a seamless way to define, manage, and execute workflows directly within your GitHub repositories. It is designed to work with the GitHub platform, making it easy to integrate with other GitHub features, such as issue tracking, pull requests, and code reviews.

By leveraging GitHub Actions, you can:

  • Save time and reduce errors by automating repetitive tasks.
  • Improve your software development lifecycle with CI/CD workflows.
  • Enhance collaboration and code quality by automatically enforcing code standards and best practices.
  • Integrate with third-party tools and services, such as Docker, Node.js, and AWS.
  • Customize and extend workflows to meet your specific needs.

Components of Github Actions

The main components of GitHub Actions include:

  • Event
    A specific activity that triggers a GitHub Actions workflow. Examples of events include a push to a repository, a pull request, a comment on an issue, or a scheduled interval.

  • Job
    A set of tasks or steps that run on the same runner (virtual machine) in a workflow. Jobs can run sequentially or in parallel, depending on their dependencies.

  • Action
    A reusable piece of code that can be used as a step in a job. Actions can be created by you, the community, or GitHub. They can be found in the GitHub Marketplace and can be integrated into your workflows.

Setting Up Your Repository

Before you can start using GitHub Actions, you need to ensure that your repository is set up correctly. To do this, follow these steps:

  1. Create a new GitHub repository or navigate to an existing one.
  2. Ensure that your repository has a .github folder in the root directory. If it doesn't exist, create one.
  3. Inside the .github folder, create a new folder called workflows. This is where you will store all your GitHub Actions workflow files.

Writing Your Action

Anatomy of a Workflow File

A workflow is defined using a YAML (Yet Another Markup Language) file. These files are stored in the .github/workflows folder within your repository. A typical workflow file consists of the following components:

  • Name
    A human-readable name for your workflow.

  • Triggers
    Events that initiate the workflow (e.g., push, pull_request, or schedule).

  • Jobs
    A set of tasks that your workflow will execute.

  • Steps
    Individual tasks within a job. Steps can be predefined actions or custom scripts.

Basic Syntax and Structure

Here's an example of a simple workflow file that prints "Hello, World!" when a push event occurs on the main branch:

.github/workflows/example.yaml
name: My First Workflow

on:
  push:
    branches:
      - main

jobs:
  hello_world:
    runs-on: ubuntu-latest
    steps:
      - name: Print message
        run: echo "Hello, World!"

In this example, the workflow is triggered by a push event to the main branch. The job hello_world is executed on the latest version of the Ubuntu virtual environment, and it has a single step that runs the command echo "Hello, World!".

Using Predefined Actions

GitHub Actions provides a variety of predefined actions that can be used to perform common tasks. These actions are available in the GitHub Marketplace and can be added to your workflow with just a few lines of YAML. Some popular predefined actions include:

  • actions/checkout: Checks out your repository to the runner.
  • actions/setup-node: Sets up a Node.js environment.
  • actions/cache: Caches dependencies and build outputs to improve workflow execution times.

Here's an example of a workflow that uses predefined actions to set up a Node.js environment, install dependencies, and run tests:

.github/workflows/example.yaml
name: Node.js CI

on: [push, pull_request]

jobs:
  build:
    runs-on: ubuntu-latest

    strategy:
      matrix:
        node-version: [12.x, 14.x, 16.x]

    steps:
    - uses: actions/checkout@v2
    - name: Set up Node.js ${{ matrix.node-version }}
      uses: actions/setup-node@v2
      with:
        node-version: ${{ matrix.node-version }}
    - run: npm ci
    - run: npm test

In this example, the workflow is triggered by push and pull_request events. The job build sets up a Node.js environment with the specified versions and runs the npm ci and npm test commands.

Pricing

GitHub Actions offers a free tier with limited resources for public repositories and a pay-as-you-go model for private repositories.

For public repositories, you get unlimited minutes and 20 concurrent jobs.

For private repositories, the free tier provides 2,000 minutes per month and 5 concurrent jobs. Additional minutes and resources can be purchased at varying rates, depending on your account type and usage. For detailed pricing information, visit the GitHub Actions pricing page.

https://github.com/pricing

References

https://docs.github.com/en/actions
https://github.com/features/actions
https://github.com/pricing

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!