πŸ“š Learning Hub
Β· 2 min read

10 GitHub Actions That Save Hours Every Week


Most repos use GitHub Actions for CI. But there are Actions that automate the tedious stuff you’re still doing by hand.

1. Dependabot β€” Auto-update dependencies

Built into GitHub. Enable it with a config file and it opens PRs for outdated dependencies automatically.

# .github/dependabot.yml
version: 2
updates:
  - package-ecosystem: "npm"
    directory: "/"
    schedule:
      interval: "weekly"

No more manually running npm outdated and updating one by one.

2. auto-approve β€” Auto-approve safe PRs

Pair with Dependabot to auto-approve patch updates. Saves the β€œLGTM” click on low-risk PRs.

- uses: hmarr/auto-approve-action@v4
  if: github.actor == 'dependabot[bot]'

3. release-please β€” Automated releases

Reads your commit messages (Conventional Commits), generates changelogs, bumps versions, and creates GitHub releases. No more manual release notes.

- uses: googleapis/release-please-action@v4
  with:
    release-type: node

4. lighthouse-ci β€” Performance checks on every PR

Runs Lighthouse on your deployed preview and fails the PR if performance drops below your threshold.

- uses: treosh/lighthouse-ci-action@v12
  with:
    urls: |
      https://preview-${{ github.event.pull_request.number }}.example.com
    budgetPath: ./budget.json

5. changed-files β€” Only run jobs for changed paths

Skip running your entire test suite when only docs changed. This Action tells you exactly which files were modified.

- uses: tj-actions/changed-files@v44
  id: changes
  with:
    files: |
      src/**
      tests/**
- run: npm test
  if: steps.changes.outputs.any_changed == 'true'

6. actions/cache β€” Cache dependencies between runs

Your CI installs node_modules on every run. Cache it and save 30-60 seconds per build.

- uses: actions/cache@v4
  with:
    path: node_modules
    key: ${{ runner.os }}-node-${{ hashFiles('package-lock.json') }}

7. peter-evans/create-pull-request β€” Auto-generate PRs from scripts

Run a script that modifies files, then automatically create a PR with the changes. Perfect for code generation, formatting, or sync tasks.

- run: npm run generate-api-types
- uses: peter-evans/create-pull-request@v6
  with:
    title: "chore: regenerate API types"
    branch: auto/api-types

8. dorny/paths-filter β€” Conditional job execution

Run different jobs based on which directories changed. Monorepo essential.

- uses: dorny/paths-filter@v3
  id: filter
  with:
    filters: |
      frontend:
        - 'apps/web/**'
      backend:
        - 'apps/api/**'

9. github-script β€” Write Actions in JavaScript

No need to build a custom Action. Write inline JavaScript that uses the GitHub API directly.

- uses: actions/github-script@v7
  with:
    script: |
      await github.rest.issues.addLabels({
        owner: context.repo.owner,
        repo: context.repo.repo,
        issue_number: context.issue.number,
        labels: ['needs-review']
      })

10. stale β€” Auto-close stale issues and PRs

Mark issues as stale after 30 days of inactivity, close them after 7 more days. Keeps your issue tracker clean without manual triage.

- uses: actions/stale@v9
  with:
    days-before-stale: 30
    days-before-close: 7
    stale-issue-message: "This issue has been inactive for 30 days."

Start with Dependabot + cache + changed-files. Those three alone will save you hours every week.

Related: Build a Reddit + Stack Overflow Monitor That Sends You Opportunities on Discord