# Awesome Actions

> A curated list of awesome things related to GitHub Actions.

Actions are triggered by GitHub platform events directly in a repo and run on-demand workflows either on Linux, Windows or macOS virtual machines or inside a container in response. With GitHub Actions you can automate your workflow from idea to production.

## Contents

- Official Resources
  - Workflow Examples
  - Official Actions
  - Create your Actions
- Community Resources
  - GitHub Tools and Management
  - Collection of Actions
  - Utility
  - Static Analysis
  - Dynamic Analysis
  - Monitoring
  - Pull Requests
  - GitHub Pages
  - Notifications and Messages
  - Deployment
  - External Services
  - Frontend Tools
  - Machine Learning Ops
  - Build
  - Database
  - Localization
  - Fun
  - Cheat Sheet
- Tutorials

## Official Resources

- Official Site
- Official Documentation
- Official Actions organization
  - actions/virtual-environments - GitHub Actions virtual environments.
  - actions/runner - The Runner for GitHub Actions.
- GitHub Blog Announcement

### Workflow Examples

- actions/starter-workflows - Starter workflow management.
- actions/example-services - Example workflows using service containers.

### Official Actions

#### Workflow Tool Actions

Tool actions for your workflow.

- actions/checkout - Setup your repository on your workflow.
- actions/upload-artifact - Upload artifacts from your workflow.
- actions/download-artifact - Download artifacts from your build.
- actions/cache - Cache dependencies and build outputs in GitHub Actions.
- actions/github-script - Write a script for GitHub API and the workflow contexts.

#### Actions for GitHub Automation

Automate management for issues, pull requests, and releases.

- actions/create-release - An Action to create releases via the GitHub Release API.
- actions/upload-release-asset - An Action to upload a release asset via the GitHub Release API.
- actions/first-interaction - An action for filtering pull requests and issues from first-time contributors.
- actions/stale - Marks issues and pull requests that have not had recent interaction.
- actions/labeler - An action for automatically labelling pull requests.
- actions/delete-package-versions - Delete versions of a package from GitHub Packages.

#### Setup Actions

Set up your GitHub Actions workflow with a specific version of your programming languages.

- actions/setup-node: Node.js
- actions/setup-python: Python
- actions/setup-go: Go
- actions/setup-dotnet: .NET core sdk
- actions/setup-haskell: Haskell (GHC and Cabal)
- actions/setup-java: Java
- actions/setup-ruby: Ruby
- actions/setup-elixir: Elixir

### Create your Actions

#### JavaScript and TypeScript Actions

- actions/toolkit - The GitHub ToolKit for developing GitHub Actions.
- actions/hello-world-javascript-action - A template to demonstrate how to build a JavaScript action.
- actions/javascript-action - Create a JavaScript Action.
- actions/typescript-action - Create a TypeScript Action.
- actions/http-client - A lightweight HTTP client optimized for use with actions, TypeScript with generics and async await.

#### Docker Container Actions

- actions/hello-world-docker-action - A template to demonstrate how to build a Docker action.
- actions/container-toolkit-action - Template repo for creating container actions using actions/toolkit.

## Community Resources

### GitHub Tools and Management

- Declaratively setup GitHub Labels
- Action to sync GitHub labels in the declarative way
- Add releases to GitHub
- Publish a docker image to Dockerhub
- Create an issue using content from a file
- Publish GitHub Releases with Assets
- GitHub Project Automation+ - Automate GitHub Project cards with any webhook event.
- Run GitHub Actions Locally with a web interface
- Run GitHub Actions Locally in Terminal
- Build and Publish Android debug APK
- Generate sequential build numbers for GitHub Actions
- Push Git changes to GitHub repository without authentication difficulties
- Generate release notes based on your events
- Create a GitHub wiki page based on the provided markdown file
- Label your Pull Requests auto-magically (using committed files)
- Add Label to your Pull Requests based on the author team name
- Get a list of file changes with PR/Push
- Use private actions in any workflow
- Label Your Issues Using the Issue’s Contents
- Rollback a GitHub Release
- Lock Closed Issues and Pull Requests after a Period of Inactivity
- Get Commit Difference Count Between Two Branches
- Generate Release Notes Based on Git References
- Enforce Policies on GitHub Repositories and Commits
- Auto Label Issue Based on Issue Description
- Update Configured GitHub Actions to the Latest Versions
- Create Issue Branch
- Remove Old Artifacts
- Expose Git Commit Data As Environment Variables
- Sync Defined Files/Binaries to Wiki or External Repositories
- Create/Update/Delete a GitHub Wiki Page Based on Any File
- Prow GitHub Actions - Automation of policy enforcement, chat-ops, and automatic PR merging.
- Check GitHub Status in your Workflow
- Manage Labels on GitHub (create/rename/update/delete) as Code
- Continuous Distribution of Funding to your Project Contributors and Dependencies
- Herald Rules for GitHub: Add Subscribers, Assignees, Labels, and More to Your PR
- GitHub Codeowners Validator - Ensures the correctness of your GitHub CODEOWNERS file. It supports public and private GitHub repositories and also GitHub Enterprise installations.
- Copybara Action - Move and transform code between repositories (ideal to maintain several repos from one monorepo).

### Collection of Actions

- Use HashiCorp’s Terraform
- GitHub Actions for Yarn 1
- GitHub Actions for Yarn 2
- GitHub Actions for Golang
- GitHub Actions for R and accompanying #rstats package
- GitHub Actions for WordPress
- GitHub Actions for Composer
- GitHub Actions for Flutter
- GitHub Actions for PHP
- GitHub Actions for Rust
- GitHub Actions for Android
- GitHub Actions for Logtalk and Prolog
- GitHub Actions for Deno
- GitHub Actions for Unity
- Octions - GitHub Actions for GitHub REST API
- GitHub Actions for Docker
- GitHub Actions for AWS
- Actions Hub

### Utility

- Setup `ssh-agent` - Run `ssh-agent` with additional SSH keys to access private repositories.
- GitHub Actions Badges for your README
- GitHub Actions for Python project with poetry
- GitHub Actions for Python project with pyenv
- GitHub Actions to compile LaTeX documents
- Update Maxmind Databases
- Debug with SSH over tmate - Debug the Action directly by providing a SSH connection.
- Unlock git-crypt files
- Golang CGO cross compiler
- Run your job on another architecture: arm32, aarch64 and others
- Generate a table of contents
- Automatically add Label or Assignee to an Issue
- Action to send LGTM reaction as image or GIF when we say lgtm
- Generate build numbers across multiple scopes
- Publish GitHub release artifacts
- Jekyll Diff Action - Diffs the built Jekyll site after a change, and comments the result back to GitHub.
- Branch Protection Bot - Temporarily disable and re-enable “Include administrators” option in branch protection.
- Wait for commit statuses - Wait until all statuses and checks are successful or any of them has failed and set its status output accordingly.
- Get Latest Tag - Get the previous tag from git.
- Create Milestone - Create a new open milestone given the title and description.
- Close Milestone - Close the given milestone.
- Action to enforce branch naming rules
- Expose slug of some GitHub variables
- awesome-lint as a GitHub Action
- Edit JSON File
- Build Slate documentation
- Read Properties - Read values from `.properties` files.
- Write Properties - Write values to `.properties` files.
- Autotag - Automatically generate a new tag when the manifest file (i.e. `package.json`) version changes.
- Apply templates with Jinja2 - Use the Jinja2 template engine to generate files from templates.
- Has Changes - Check if there are code changes from previous steps.
- Mind Your Language Action - Detect offensive comments in issues and pull requests, and warn senders.
- YAML/JSON/XML Converter - Converts YAML/JSON/XML file formats interchangeably.
- NSFW Detection - Detect NSFW content in committed files.
- Has Changed Path - Conditionally run actions based on changed paths.
- Linguist - Checks a repository and produces information about used languages in output.
- Twilio Voice Call - Make Twilio voice call with defined text.
- Setup Xcode - Switch between pre-installed versions of Xcode for macOS images.
- Setup Xamarin - Switch between pre-installed versions of Xamarin and Mono for macOS images.
- Memer Action - A GitHub Action for Programmer Memes xD.
- Setup Cocoapods - Setup specific version of Cocoapods.
- Public IP - Queries GitHub actions runner’s public IP address.
- GitHub Actions for Lazarus/FPC
- Twilio Fax - Sends a document by fax using your Twilio account.
- Setup Kubernetes tools - Install Kubernetes tools (kubectl, kustomize, helm, kubeval, conftest, and yq) on the runner.
- Setup Elastic Cloud Control Tool - Install a specific version of ecctl on the runner.
- PowerShell Script - Run PowerShell scripts with workflow contexts (e.g. `$github.token`) and cmdlets, return value => action output.
- Upload and Scan Files with VirusTotal
- Import a GPG Key
- Compress with UPX - The Ultimate Packer for eXecutables.
- Pull the New Go Module Version Into the Proxy Cache - Ensures the latest version of your Go module is in the proxy cache. Also updates the pkg.go.dev documentation upon release.
- Delete Run Artifacts - Deletes all artifacts at the end of a workflow run.
- GitHub Environment Variables Action - Expose environment variables such as the branch/tag name, repository slug, and ref slug.
- GitHub Action Locks - Guarantee atomic execution of your GitHub Action workflows.
- Paths Filter - Conditionally run actions based on files modified by PR, feature branch or pushed commits.
- Minisauras - Pulls all the JavaScript and CSS files from your base branch, minify them and creates a pull-request with a new branch.

#### Environments

- Create an envfile
- Export global environment variables for succeeding build steps
- Programmatically set environment variables for use in subsequent steps
- Install Conda environments for Python
- Setup NativeScript
- Create a JSON Environment File

#### Dependencies

- Install NPM Dependencies with Caching
- Highlight New NPM Dependencies - Comments on pull requests newly added NPM dependencies information.
- Cache NPM Dependencies
- Cache Yarn Dependencies

#### Semantic Versioning

- Next SemVers - Output the next version for major, minor, and patch version based on the given semver version.
- Get latest SemVer and branch name given a search string
- Cut Release Branch - Cuts a release branch given a branch prefix and optional semantic version.
- Increment Semantic Version - Bump a given semantic version (SemVer), depending on given release type.

### Static Analysis

- PHPStan Static code analyzer Action
- GraphQL Inspector Action
- PowerShell static analysis with PSScriptAnalyzer
- Run tfsec, with reviewdog output on the PR

#### Testing

- Run Tests through Puppeteer, the Headless Chrome Node API
- xUnit Slack Reporter: Sends summary of tests from xUnit reports to a Slack channel
- Run codeception tests
- Run TestCafe tests
- Run Unity tests
- Run Cypress E2E tests
- Test Ansible roles with Molecule
- Run performance testing with artillery.io
- Detect Flaky Tests with BuildPulse
- Display Inline Code Annotations for Jest Tests

#### Linting

- PHP Coding Standards Fixer Action
- Runs Hadolint against a Dockerfile within a repository
- Run ESLint, with reviewdog output on the PR
- JavaScript-based linter for *.workflow files
- Lint terraform files using tflint, with reviewdog output on the PR
- autopep8: Automatically formats Python code to conform to the PEP 8 style guide
- Run `ergebnis/composer-normalize` to ensure your PHP project has a normalized `composer.json`
- Run Go lint checks on PR event
- Node.js - Automatically run the `format` and/or `lint` script used by the package
- Stylelinter - GitHub Action that runs stylelint
- Run stylelint, with reviewdog output on the PR
- PyCodeStyle Action - A GitHub Action that leaves a comment on your PR with pycodestyle (autopep8) feedback
- wemake-python-styleguide - The strictest and most opinionated python linter ever, with optional reviewdog output on the PR
- Run TSLint with status checks and file diff annotations
- Lint Pull Request commits with commitlint
- Run vint, with reviewdog output on the PR
- Run mispell, with reviewdog output on the PR
- Run golangci-lint, with reviewdog output on the PR
- Run shellcheck, with reviewdog output on the PR
- Catch insensitive, inconsiderate writing in your markdown docs
- Run dotenv-linter - Lints your .env files like a charm, with optional reviewdog output on the PR
- Run dotenv-linter, with reviewdog output on the PR
- Show and auto-fix linting errors for many programming languages
- PHP_CodeSniffer With Annotations
- Linter for markdown (with presets)
- Stylelint problem matcher to create annotations
- Run sqlcheck on the PR to identifies anti-patterns in SQL queries
- Validate Fastlane Supply Metadata Against the Play Store Guidelines
- Run Golint to lint your Golang code

#### Security

- A vulnerability scanner for your docker images
- Automatically approve and merge Dependabot updates
- Run dlint security linter on your Python code
- AWS Secrets Manager Actions - Define AWS Secrets Manager secrets to environment values.
- Linting your AWS IAM policy documents for correctness and security issues
- Secret Spreader - Not an action per se, but a tool to manage Actions Secrets across a list of repositories.
- Secrets Sync Action - Action syncs secrets across multiple repositories.
- Snyk Test Action
- Manage Your GitHub Actions Secrets With A Simple CLI
- SecretHub - Have a single source of truth for your secrets and load them into GitHub Actions on demand.

#### Code Coverage

- Scan code with SonarCloud
- Send your code coverage to codecov.io
- Publishing code coverage to CodeClimate
- Update repository go report card

### Dynamic Analysis

- Run Gofmt to check Golang code formatting
- Run Goimports to check Golang imports order

### Monitoring

- Audit a webpage with Google Chrome’s Lighthouse tests
- Runs Lighthouse and posts results to PRs and Slack
- Run Lighthouse in CI using GitHub Actions
- Continuous Benchmarking and Benchmark Visualization for Go
- Size Limit Action - Comments cost comparison of your JS in PRs and rejects them if limit is exceeded.
- Check bundlephobia - Comments new and modified package size according to bundlephobia.io website and rejects PR on threshold surpassed.

### Pull Requests

- Set PR Reviewers Based on Assignees
- Open or Update PR on Branch Push (with Branch Selection)
- Automatically Rebase a PR
- Label PR once it has a Specified Number of Approvals
- Add Labels to a PR based on Matched File Patterns
- Auto-Approve PRs
- Automatically add Reviewers to PR based on the Configuration File
- Add Labels to a PR based on Branch Name Patterns
- Add Labels to a PR based on Total Size of the Diff
- Automatically merge PRs That Are Ready
- Verify That PRs Contain a Ticket Reference
- Create a PR for Changes to your Repository in the Actions Workspace
- Lint a PR
- ChatOps for PRs
- Prefix Title and Body of a PR Based on Text Extracted from Branch Name
- Block Autosquash Commits
- Automatically Bump and Tag on Merge
- Automatically Update PRs with Outdated Checks and Squash and Merge the Ones Matching All Branch Protections
- Merge Pal - Automatically Update and Merge PRs
- Enforce naming convention on pull request title
- Pull Request Stuck Notifier
- Lint pull request name with commitlint (Awesome if you squash merge !)
- Block PR merges when Checks for target branches are failing
- Get generated static site screenshots updated by Pull Request
- Add Labels Depending if the Pull Request Still in Progress
- Ticket Check Action - Automatically add a ticket or issue number to the start of all Pull Request titles.
- Pull Request Lint With Regex
- Pull Request Landmines
- Annotate a GitHub Pull Request Based on a Checkstyle XML-Report
- Pull Request Stats - Print relevant stats about reviewers.
- Pull Request Description Enforcer - Enforces description on pull requests.

### GitHub Pages

- Deploy a Zola site to GitHub Pages
- Build Hugo static content site and publish it to gh-pages branch
- Build a Jekyll site—with Custom Jekyll Plugins & Build Scripts—and deploy it back to the Gh-Pages Branch
- Google Dataset Search Metadata - And other schema.org extractors to make datasets discoverable from GitHub pages.
- GitHub Actions for deploying to GitHub Pages with Static Site Generators
- GitHub Action for Hexo
- Deploy Google Analytics stats to GitHub Pages
- A Jupyter Notebook Blogging Platform Powered by GitHub Actions, Pages and Jekyll
- Deploy A Static Site to GitHub Pages - Deploy to custom directory and ignore folder/file.
- Deploy to GitHub Pages with Advanced Settings

### Notifications and Messages

- Send a Discord notification
- Post a Slack message as a bot
- Send an SMS from GitHub Actions using Nexmo
- Send an SMS from GitHub Actions using Clockworksms
- Send a Telegram Message
- Send a File or Text Message to Discord (custom define color, username or avatar)
- Collaborate on tweets using pull requests
- Send a Push Notification via Push by Techulus
- Send email with SendGrid
- Send a Push Notification via Join
- New package version checker for npm
- New package version checker for NuGet
- New package version checker for Gradle
- Send a Push Notification via Pushbullet
- Create an Outlook Calendar Event using Microsoft Graph
- Watch for GitHub Wiki page changes and post to Slack
- Send an SMS using MessageBird
- Reply to Stale Bots
- Send an Embed Message to Discord
- Keep Your PRs in Sync With Teamwork Tasks
- Send Microsoft Teams Notification

### Deployment

- Deploy to Netlify
- Deploy a Probot App using Actions
- Deploy a playlist to Spotify
- Deploy VS Code extensions with vsce
- Purge Cloudflare cache after updating a website
- Deploy your DNS configuration using DNS Control
- Deploy a Theme to Shopify
- Trigger multiple GitLab CI Pipeline
- Trigger multiple Jenkins Jobs
- GitHub Action for Homebrew Tap
- Copy files and artifacts via SSH
- Executing remote ssh commands
- Publish a Python distribution package to PyPI
- Deploy Static Website to Azure Storage
- Cross platform Chocolatey CLI to build and publish packages
- Deploy iOS Pod Library to Cocoapods
- GitHub Action for TencentCloud Serverless
- Publish npm (pre)releases
- Deploy a static site to Surge.sh
- GitHub Action for GoReleaser, a release automation tool for Go projects
- FTP Deploy Action, Deploys a GitHub project to a FTP server using GitHub actions
- Publish Article to Dev.to
- Action For Semantic Release
- Deploy a Collection to Ansible Galaxy
- Publish module to Puppet Forge
- Build and publish Electron apps
- Publish a Maven package
- Build and deploy a theme to Ghost CMS
- Deploy an Ansible role to Ansible Galaxy
- Publish one or more JS modules to a registry
- Publish a package with 2FA using Slack
- Serialize Workflow Runs in Continuous Deployment Pipelines
- Netlify Deploy GitHub Action for each commit
- Run Ansible Playbooks
- Publish a Python Distribution Package to Anaconda Cloud
- Deploy VS Code Extension to Visual Studio Marketplace or the Open VSX Registry
- Deploy a YouTube Video to Anchor.fm Podcast
- Deploy with AWS CodeDeploy

#### Docker

- Update a Docker Hub repository description from README.md
- Publish Docker Images to the GitHub Package Registry (GPR)
- Update a repository’s “Full description” on Docker Hub
- Build and publish docker images to any registry using Kaniko
- Monitor and limit your docker image size
- Publish Docker Images to the Amazon Elastic Container Registry (ECR)
- Build And Push Your Docker Images Caching Each Stage To Reduce Build Time
- Set up Docker Buildx
- Convert Branch or Tag Name Into Docker-Compatible Image Tag
- Update a Container Repository Description From README.md - Supported Registries: Docker Hub, Quay, Harbor.

#### Kubernetes

- Deploy to any Cloud or Kubernetes Using Pulumi
- Deploy to Kubernetes with kubectl
- Get Kubeconfig File From Google Kubernetes Engine (GKE)
- Kustomize Kubernetes Config YAMLs
- Create a Kubernetes Cluster for Testing Using Krucible

#### AWS

- Sync/upload a directory to an AWS S3 bucket
- Deploy Lambda code to an existing function

#### Terraform

- Generate terraform documentation - Uses terraform-docs to generate docs for terraform modules.
- An example of using Terraform to validate and apply GitHub administration

### External Services

- Use a Jenkinsfile
- GitHub Action for Firebase
- GitHub Action for Contentful Migration CLI
- GitHub Actions for Pixela (a-know/pi)
- GitHub Action for Google Cloud Platform (GCP)
- Upload files to any OpenStack Swift service provider
- GitHub Action for sending Stack Overflow posts to Slack
- Assume AWS role
- Generate Custom Response using JSONbin

### Frontend Tools

- Execute Gradle task
- JS Build Actions - Run Grunt or Gulp build tasks and commit file changes.
- GitHub Action for Gatsby CLI
- Runs a WebPageTest audit and prints the results as commit comment
- GitHub Actions for Hugo extended
- Generate OG Image - Generate customisable open graph images from Markdown files.
- GitHub Actions for mdBook
- Setup Mint - Setup Mint (programming language for writing single page applications).
- Gatsby AWS S3 Deployment - Deploy Gatsby to S3 (supports CloudFront).

### Machine Learning Ops

- Submitting Argo Workflows (Cloud Agnostic)
- Submitting Argo Workflows to GKE
- Query Experiment Tracking Results From Weights & Biases
- Run Parameterized Jupyter Notebooks
- Compile, Deploy and Run Kubeflow Pipeline
- Automatically Dockerize A Data-Science Repo As A Jupyter Server
- Azure Machine Learning With GitHub Actions

### Build

- run-cmake - Multi platform action to build C/C++ software with CMake and Ninja.
- run-vcpkg - Multi platform action to build and install C/C++ dependencies with vcpkg.
- Build Go applications for multiplatform
- Generate ~/.m2/settings.xml for Maven builds
- Run Pascal Script
- Setup Brainfuck - Setup brainfuck interpreter.
- Publish Go Binaries to GitHub Release Assets
- Setup COBOL

### Database

- Setup Cassandra Schema - Running scripts from the provided folder on top of Cassandra cluster.

### Localization

- Find and automatically fix typos and grammar issues in your code
- Translation - Translate text from any language to any language.

### Fun

- Add equivalent of a like button in your README - Visualize community approval on some part of your readme (can be used as a poll).

### Cheat Sheet

- GitHub Actions Branding Cheat Sheet

## Tutorials

- Continuous deployment of Next.js app with Up
- Converting Docker-based Actions to JavaScript/TypeScript
- GitHub Actions CI for Swift/iOS Projects
- Working with GitHub Actions
- GitHub Actions for Rails Developers
- GitHub Actions Advent Calendar
- Zero Downtime Laravel Deployments with GitHub Actions
- Building Custom GitHub Actions Pluralsight Course
- Continuously Deploying Django to DigitalOcean with Docker and GitHub Actions
- Deploying Self-Hosted GitHub Actions Runners with Docker - Deploy self-hosted GitHub Actions runners with Docker and Docker Swarm to DigitalOcean.
- Setup Auto-scaled self-hosted GitHub Actions Runners on AWS Spot-instances
- Getting the Gist of GitHub Actions

> Please don’t hesitate to make a PR if you have more resources to share. Check out contributing.md for more information.