GitHub Actions

GitHub Actions Core Concepts

GitHub Action Core Components

Automating your CI/CD pipelines with GitHub Actions starts with understanding its three building blocks: workflows, jobs, and steps. In this guide, we’ll break down each component, show examples, and highlight best practices for scalable, maintainable pipelines.


1. Workflow

A workflow is a YAML-defined automation triggered by repository events (such as push, pull_request, or scheduled events). You store workflows in the .github/workflows directory of your repo.

name: My Awesome App CI
on:
  push:
    branches: [ main ]
  pull_request:

jobs:
  unit-testing:
    name: Unit Testing
    runs-on: ubuntu-latest
    steps:
      - name: Checkout Repository
        uses: actions/checkout@v3

      - name: Setup Node.js
        uses: actions/setup-node@v3
        with:
          node-version: 20

      - name: Install Dependencies
        run: npm ci

      - name: Run Tests
        run: npm test

Note

Workflows must reside in .github/workflows; files ending with .yml or .yaml will be automatically detected.

Key workflow fields:

FieldDescription
nameFriendly name displayed in the Actions tab
onDefines trigger events (e.g., push, pull_request)
jobsA map of jobs to execute sequentially or in parallel

2. Job

A job is a sequence of steps that run on the same runner. Jobs execute in isolation, so artifacts and environment variables are not shared unless you explicitly pass them.

jobs:
  build-and-test:
    name: Build & Test
    runs-on: ubuntu-latest
    steps:
      # Steps defined here…
  • runs-on: Specifies the runner environment (GitHub-hosted or self-hosted).
  • Jobs can run in parallel by default, or you can enforce a sequence using needs.

Warning

By default, each job runs in a clean VM/container. Use needs to share artifacts or enforce order.


3. Steps

Steps are individual tasks executed within a job. They run sequentially on the job’s runner and support two main modes:

  • Actions (uses:) – Reusable extensions from GitHub Marketplace or your own.
  • Commands (run:) – Inline shell commands.

Example steps:

steps:
  - name: Checkout
    uses: actions/checkout@v3

  - name: Setup Node.js
    uses: actions/setup-node@v3
    with:
      node-version: 20

  - name: Install Dependencies
    run: npm ci

  - name: Run Unit Tests
    run: npm test
Step TypeDescriptionExample
Action (uses)Leverage community-built or official actions.uses: actions/checkout@v3
Command (run)Execute shell commands on the runner.run: npm test

You can extend your workflows with first-party or community actions. Here are a few commonly used ones:

The image outlines a three-step GitHub Actions process: building and pushing Docker images, creating an AKS cluster, and consuming Vault secrets.


Component Comparison

ComponentPurposeExample Usage
WorkflowDefines event triggers and jobs.github/workflows/ci.yml
JobEncapsulates steps on a runnerruns-on: ubuntu-latest
StepExecutes an action or shell commanduses: actions/setup-node@v3 / run:

Next Steps

Now that you’ve seen how workflows, jobs, and steps interact, let’s create your first GitHub Actions workflow from scratch:

mkdir -p .github/workflows
cat << 'EOF' > .github/workflows/ci.yml
name: CI Pipeline
on: [push]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - run: echo "Hello, GitHub Actions!"
EOF

Commit and push to trigger your first automation run.


References

Watch Video

Watch video content

Previous
Create amp Explore GitHub Account