⚙️ GitHub Actions // CI/CD Pipeline // Aayush Mishra · SDET // on: push · pull_request · schedule // Build → Test → Report → Deploy // Parallel Jobs · Matrix Strategy · Artifacts // ⚙️ GitHub Actions // CI/CD Pipeline // Aayush Mishra · SDET // on: push · pull_request · schedule // Build → Test → Report → Deploy // Parallel Jobs · Matrix Strategy · Artifacts //
CI
CI/CD Pipeline Active

AUTOMATE EVERY PIPELINE.

GitHub Actions is Microsoft's native CI/CD platform — built directly into GitHub. Define pipelines as YAML workflows that trigger on push, PR, schedule, or any event. Build, test, report and deploy — all automated.

YAMLConfig Format
FreePublic Repos
20+Trigger Events
∞Parallel Jobs
.github/workflows/ci.yml
main
🔨
Build & Compile
ubuntu-latest · node 20
✓ passed
▼
🧪
Playwright Tests
chromium · firefox · webkit
● running
▼
📊
Upload Reports
playwright-report → artifacts
queued
▼
🚀
Deploy to Staging
on: main branch only
queued
✦ 01 · What is GitHub Actions

Zero-config
CI/CD
built into GitHub.

GitHub Actions lives inside your repository. No external CI server. No separate login. Define your entire pipeline in a YAML file and GitHub runs it automatically on any event you choose.

Before Actions, teams juggled Jenkins, CircleCI, Travis and separate deployment scripts. Every tool had its own auth, config format and UI. Context-switching was constant.

GitHub Actions unifies everything: the code, the pipeline, the secrets, the artifacts and the deployment — all in one place. Push a commit, and your entire CI/CD chain kicks off automatically. No setup, no servers, no separate tools.

.github/workflows/ci.yml
YAML
name: Playwright CI

on:
  push:
    branches: [main, develop]
  pull_request:
    branches: [main]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 20
      - run: npm ci
      - run: npx playwright install --with-deps
      - run: npx playwright test
      - uses: actions/upload-artifact@v4
        if: always()
        with:
          name: playwright-report
          path: playwright-report/
📦
Native GitHub Integration
Lives in your repo. Uses GitHub secrets. Status checks block PRs. No external service, no separate login — everything is already where your code lives.
🌐
Matrix Strategy
Run your tests across multiple Node versions, OS types or browsers in parallel automatically. One config, N combinations — all running simultaneously.
📊
Artifacts & Reports
Upload Playwright reports, screenshots and trace files as artifacts. Downloadable from the Actions UI for up to 90 days — no external storage needed.
🔒
Secrets Management
Store API keys, credentials and tokens as encrypted repository secrets. Reference them in YAML as ${{ secrets.MY_KEY }} — never in code.
🔁
Reusable Workflows
Define a workflow once, call it from multiple repositories using workflow_call. Share CI logic across your entire org without duplication.
✦ 02 · CI/CD Pipeline

Six stages.
One commit triggers all.

Every push to your repository sets this pipeline in motion — automatically, in sequence, in minutes.

📤
Stage 01
git push
Developer pushes code to branch — workflow triggers instantly
🔨
Stage 02
Build
npm ci, TypeScript compile, dependency resolution
🧪
Stage 03
Test
Playwright E2E across chromium, firefox, webkit in parallel
📊
Stage 04
Report
Upload traces, screenshots and HTML report as artifacts
✅
Stage 05
Gate
PR status check blocks merge if any tests failed
🚀
Stage 06
Deploy
Auto-deploy to staging on main branch pass — zero manual steps
✦ Matrix Strategy — Cross-Browser
.github/workflows/cross-browser.yml
YAML
jobs:
  playwright:
    name: Playwright (${{ matrix.browser }})
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false          # don't cancel others on one failure
      matrix:
        browser: [chromium, firefox, webkit]
    steps:
      - uses: actions/checkout@v4
      - run: npm ci
      - run: npx playwright install ${{ matrix.browser }} --with-deps
      - run: npx playwright test --project=${{ matrix.browser }}
        env:
          BASE_URL: ${{ secrets.STAGING_URL }}
          TEST_USER: ${{ secrets.TEST_USER }}
          TEST_PASS: ${{ secrets.TEST_PASS }}
      - uses: actions/upload-artifact@v4
        if: failure()          # only upload on fail
        with:
          name: traces-${{ matrix.browser }}
          path: test-results/
✦ 03 · Workflow Triggers

Trigger on
anything.

GitHub Actions supports 20+ trigger events. Here are the ones every SDET uses daily to automate test execution.

📤
on: push
Run tests every time code is pushed to a branch. Gate quality at every single commit before it reaches main.
on: push: branches: [main, develop]
🔀
on: pull_request
Run tests on every PR. Block merges with required status checks — no broken code gets into main, ever.
on: pull_request: branches: [main]
⏰
on: schedule
Run regression suites nightly on a cron schedule. Catch issues introduced by external API changes or data drift.
on: schedule: - cron: '0 2 * * *'
🖱️
on: workflow_dispatch
Manually trigger a workflow from the GitHub UI with custom inputs. Perfect for on-demand regression runs.
on: workflow_dispatch: inputs: environment: staging
🏷️
on: release
Trigger full regression suite automatically when a release tag is created. Quality gate before every production deploy.
on: release: types: [published]
🔁
on: workflow_call
Allow another workflow to call this one as a reusable job. Share test pipelines across multiple repositories without duplication.
on: workflow_call: inputs: url: {type: string}
✦ 04 · Workflow Execution Playground

⚙️ Build & Run any Pipeline.

Choose a workflow preset or build your own. Watch the animated pipeline graph execute in real-time — parallel jobs, dependencies, matrix expansions, artifacts and status gates all visualised live.

name: playwright # push → main / develop

on:
  push: { branches: [main] }

jobs:
  t:
    runs-on: ubuntu-latest
    steps:
      # Received push event · branch: main · Run #7203 queued
  setup:
    runs-on: ubuntu-latest
    steps:
      # actions/checkout@v4 · HEAD sha: a3f9c12 · actions/setup-node@v4 · node 20.11.0
  chrome:
    needs: [setup]
    # runs in parallel with sibling jobs
    runs-on: ubuntu-latest
    steps:
      # npx playwright install chromium --with-deps · Browser: Chromium 124.0.6367.60
  firefox:
    needs: [setup]
    # runs in parallel with sibling jobs
    runs-on: ubuntu-latest
    steps:
      # npx playwright install firefox --with-deps · Browser: Firefox 125.0
  webkit:
    needs: [setup]
    # runs in parallel with sibling jobs
    runs-on: ubuntu-latest
    steps:
      # npx playwright install webkit --with-deps · Browser: WebKit 17.4
  report:
    needs: [chrome, firefox, webkit]
    runs-on: ubuntu-latest
    steps:
      # Merging reports from 3 matrix jobs... · Generating HTML report (playwright-report/)
  gate:
    needs: [report]
    runs-on: ubuntu-latest
    steps:
      # All required jobs passed ✓ · github/checks: playwright / test → success
· 📤 Triggered push → main
· 📦 Setup checkout + npm ci
· 🔵 Chromium matrix · 14 tests
· 🦊 Firefox matrix · 14 tests
· 🧭 WebKit matrix · 14 tests
· 📊 Report HTML + artifacts
· ✅ PR Gate status check passed
github-actions · idle
idle
00:00:00INFOPlayground ready — pick a scenario and click ▶ Execute Workflow
0 / 0 jobs 0%
✦ 05 · Live GitHub Data

Your real repos.
Real commits.

Enter your GitHub username (and optionally a Personal Access Token for private repos & workflow runs). Data is fetched live from the GitHub API — nothing stored.

🔒 Token is used only in your browser for this session — never sent to any server. Generate one at github.com/settings/tokens with repo + workflow scopes.

GitHub Profile
Aayush-Mishraa
Aayush Mishra
@Aayush-Mishraa
I actively participate in the data science community, sharing my knowledge, insights, and code snippets on GitHub. I contribute to open-source projects
33Repos
2Followers
11Following
🏢 Keywords Studios
📍 Bangalore | Gurgaon | Hyderabad
View on GitHub ↗
Public Repositories (12 shown)
No description
⭐ 0 18m ago
Personal portfolio showcasing automation projects, AI testing tools, and software engineering work.
html-css-javascriptjsnodejs
JavaScript ⭐ 2 12h ago
An AI-powered web test automation framework built using Amazon Nova Act. This project demonstrates how Large Language Models can autonomously execute end-to-end UI test scenarios using natural language instructions.
awsaws-s3bedrock
Python ⭐ 1 17h ago
Production-style End-to-End E-commerce Automation Framework using Playwright for UI and API testing. Covers real-world flows like authentication, product search, cart management, checkout, order validation, and API verification. Built with scalable POM architecture and CI/CD-ready setup. 🔗 https://aayushmishra.engineer/ecommerceautomation/
allure-reportplaywrighttypescript
⭐ 1 23h ago
Comprehensive Playwright automation repository covering UI, API, and real-world scenarios from basic to advanced, with auth handling, network monitoring, data-driven testing, reusable utilities, and E2E flows.
javascriptplaywrighttest-automation
TypeScript ⭐ 1 7d ago
Phoenix In-Warranty Flow Automation validates APIs for managing warranty claims and service requests for mobiles, laptops, and accessories. It covers customer request creation, service provider assignment, device tracking, and status updates to ensure reliability, accuracy, and smooth service workflows.
actionsaws-ec2github
⭐ 2 7d ago
Scalable API automation framework using Playwright (JavaScript) with reusable request utilities, environment configuration, parallel execution, schema validation, and CI/CD-ready setup. Designed following clean architecture principles.
apijavascriptjsonpath
TypeScript ⭐ 1 10d ago
Playwright + Cucumber BDD end-to-end test automation framework using POM for maintainability. Supports parallel execution, retries, auto-screenshots on failure, and Cucumber HTML & Allure reports. Covers e-commerce UI flows (login, cart, checkout, validations) across Chromium, Firefox, and WebKit.
cucumber-jsplaywright
JavaScript ⭐ 1 10d ago
Node.js library for dynamic Excel file manipulation - search, read, write, and replace values with flexible row/column operations
exceljsjavascriptnodejs
JavaScript ⭐ 1 18d ago
Aayush
⭐ 3 2mo ago
No description
⭐ 2 2mo ago
This repository consists of the code samples, assignments, and notes for the Java Data Structures & Algorithms bootcamp of Community Classroom.
⭐ 2 2mo ago
Recent Commits — Aayush-Mishraa/DOINGTESTING
Recent Workflow Runs
✦ 06 · Setup Guide

From zero to
pipeline in 5 minutes.

Create a YAML file in .github/workflows/ and GitHub detects it automatically. No external tool installation, no CI server setup.

Step 01
Create Workflow Dir
Create the .github/workflows/ directory in your repository root. GitHub detects all .yml files here automatically.
mkdir -p .github/workflows
Step 02
Create Workflow File
Create ci.yml inside the workflows directory. This defines your entire pipeline in YAML format.
.github/workflows/ci.yml
Step 03
Define Triggers
Set the on: block to specify when the workflow runs — push, pull_request, schedule or manual dispatch.
on: push / pull_request / schedule
Step 04
Configure Jobs
Define one or more jobs under jobs:. Each job runs on a fresh virtual machine — ubuntu-latest, windows or macos.
jobs: test: runs-on: ubuntu-latest
Step 05
Add Secrets
Store credentials in Settings → Secrets. Reference as ${{ secrets.MY_KEY }} in your YAML — never hardcode credentials.
secrets.BASE_URL / secrets.TEST_PASS
Step 06
Install Playwright
Add the npx playwright install --with-deps step. This downloads browsers on the runner automatically every time.
npx playwright install --with-deps
Step 07
Upload Artifacts
Use actions/upload-artifact@v4 to save playwright-report/ as a downloadable artifact after every run.
actions/upload-artifact@v4
Step 08
Enable Required Checks
In Settings → Branches, add your workflow as a required status check. PRs cannot merge if tests fail.
Settings → Branches → Protection Rules
✦ 07 · Best Practices

Pipelines that
never slow you down.

The patterns that keep CI pipelines fast, reliable and maintainable as your test suite grows.

⚡
Cache node_modules
Use actions/cache@v4 to cache node_modules and Playwright browser binaries between runs. Cuts pipeline time from 4 minutes to under 90 seconds on warm cache.
Performance
💥
fail-fast: false
In matrix jobs, always set fail-fast: false. If Safari tests fail, you still want to see Firefox and Chrome results — don't cancel the whole matrix on one failure.
Reliability
📁
Always Upload Artifacts
Use if: always() on upload-artifact steps. Even when tests fail, you need the Playwright trace and HTML report to debug. A report that only uploads on pass is useless.
Debugging
🔒
Never Hardcode Secrets
All credentials, URLs and tokens go in repository secrets or environment secrets. Reference as ${{ secrets.KEY }}. Rotate credentials regularly and restrict access by environment.
Security
🔁
Reusable Workflows
Extract your Playwright test job into a reusable workflow with workflow_call. Call it from every repository in your org — one source of truth for your CI logic.
Architecture
🌿
Concurrency Groups
Use concurrency: group: ${{ github.workflow }}-${{ github.ref }} with cancel-in-progress: true. Cancels old runs when new commits push to the same branch — saves runner minutes.
Efficiency