-
Notifications
You must be signed in to change notification settings - Fork 4.1k
Add multiple workflow configurations and examples for GitHub Actions #1521
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
34d8865
732c1b5
4161e56
26bb181
7f49d09
1673a41
f747d5f
9a15410
b64096c
a375ab9
e17158f
4cf5e3d
8fbf6c4
a871e45
24deb52
85561ec
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,101 @@ | ||
| # For most projects, this workflow file will not need changing; you simply need | ||
| # to commit it to your repository. | ||
| # | ||
| # You may wish to alter this file to override the set of languages analyzed, | ||
| # or to provide custom queries or build logic. | ||
| # | ||
| # ******** NOTE ******** | ||
| # We have attempted to detect the languages in your repository. Please check | ||
| # the `language` matrix defined below to confirm you have the correct set of | ||
| # supported CodeQL languages. | ||
| # | ||
| name: "CodeQL Advanced" | ||
|
|
||
| on: | ||
| push: | ||
| branches: [ "main" ] | ||
| pull_request: | ||
| branches: [ "main" ] | ||
| schedule: | ||
| - cron: '43 5 * * 5' | ||
|
|
||
| jobs: | ||
| analyze: | ||
| name: Analyze (${{ matrix.language }}) | ||
| # Runner size impacts CodeQL analysis time. To learn more, please see: | ||
| # - https://gh.io/recommended-hardware-resources-for-running-codeql | ||
| # - https://gh.io/supported-runners-and-hardware-resources | ||
| # - https://gh.io/using-larger-runners (GitHub.com only) | ||
| # Consider using larger runners or machines with greater resources for possible analysis time improvements. | ||
| runs-on: ${{ (matrix.language == 'swift' && 'macos-latest') || 'ubuntu-latest' }} | ||
| permissions: | ||
| # required for all workflows | ||
| security-events: write | ||
|
|
||
| # required to fetch internal or private CodeQL packs | ||
| packages: read | ||
|
|
||
| # only required for workflows in private repositories | ||
| actions: read | ||
| contents: read | ||
|
|
||
| strategy: | ||
| fail-fast: false | ||
| matrix: | ||
| include: | ||
| - language: actions | ||
| build-mode: none | ||
| - language: javascript-typescript | ||
| build-mode: none | ||
| # CodeQL supports the following values keywords for 'language': 'actions', 'c-cpp', 'csharp', 'go', 'java-kotlin', 'javascript-typescript', 'python', 'ruby', 'rust', 'swift' | ||
| # Use `c-cpp` to analyze code written in C, C++ or both | ||
| # Use 'java-kotlin' to analyze code written in Java, Kotlin or both | ||
| # Use 'javascript-typescript' to analyze code written in JavaScript, TypeScript or both | ||
| # To learn more about changing the languages that are analyzed or customizing the build mode for your analysis, | ||
| # see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/customizing-your-advanced-setup-for-code-scanning. | ||
| # If you are analyzing a compiled language, you can modify the 'build-mode' for that language to customize how | ||
| # your codebase is analyzed, see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages | ||
| steps: | ||
| - name: Checkout repository | ||
| uses: actions/checkout@v4 | ||
|
|
||
| # Add any setup steps before running the `github/codeql-action/init` action. | ||
| # This includes steps like installing compilers or runtimes (`actions/setup-node` | ||
| # or others). This is typically only required for manual builds. | ||
| # - name: Setup runtime (example) | ||
| # uses: actions/setup-example@v1 | ||
|
|
||
| # Initializes the CodeQL tools for scanning. | ||
| - name: Initialize CodeQL | ||
| uses: github/codeql-action/init@v4 | ||
| with: | ||
| languages: ${{ matrix.language }} | ||
| build-mode: ${{ matrix.build-mode }} | ||
| # If you wish to specify custom queries, you can do so here or in a config file. | ||
| # By default, queries listed here will override any specified in a config file. | ||
| # Prefix the list here with "+" to use these queries and those in the config file. | ||
|
|
||
| # For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs | ||
| # queries: security-extended,security-and-quality | ||
|
|
||
| # If the analyze step fails for one of the languages you are analyzing with | ||
| # "We were unable to automatically build your code", modify the matrix above | ||
| # to set the build mode to "manual" for that language. Then modify this step | ||
| # to build your code. | ||
| # ℹ️ Command-line programs to run using the OS shell. | ||
| # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun | ||
| - name: Run manual build steps | ||
| if: matrix.build-mode == 'manual' | ||
| shell: bash | ||
| run: | | ||
| echo 'If you are using a "manual" build mode for one or more of the' \ | ||
| 'languages you are analyzing, replace this with the commands to build' \ | ||
| 'your code, for example:' | ||
| echo ' make bootstrap' | ||
| echo ' make release' | ||
| exit 1 | ||
|
|
||
| - name: Perform CodeQL Analysis | ||
| uses: github/codeql-action/analyze@v4 | ||
| with: | ||
| category: "/language:${{matrix.language}}" |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,42 @@ | ||
| # This workflow uses actions that are not certified by GitHub. | ||
| # They are provided by a third-party and are governed by | ||
| # separate terms of service, privacy policy, and support | ||
| # documentation. | ||
|
|
||
| # This workflow will install Deno then run `deno lint` and `deno test`. | ||
| # For more information see: https://github.com/denoland/setup-deno | ||
|
|
||
| name: Deno | ||
|
|
||
| on: | ||
| push: | ||
| branches: ["main"] | ||
| pull_request: | ||
| branches: ["main"] | ||
|
|
||
| permissions: | ||
| contents: read | ||
|
|
||
| jobs: | ||
| test: | ||
| runs-on: ubuntu-latest | ||
|
|
||
| steps: | ||
| - name: Setup repo | ||
| uses: actions/checkout@v4 | ||
|
|
||
| - name: Setup Deno | ||
| # uses: denoland/setup-deno@v1 | ||
| uses: denoland/setup-deno@61fe2df320078202e33d7d5ad347e7dcfa0e8f31 # v1.1.2 | ||
| with: | ||
| deno-version: v1.x | ||
|
|
||
| # Uncomment this step to verify the use of 'deno fmt' on each commit. | ||
| # - name: Verify formatting | ||
| # run: deno fmt --check | ||
|
|
||
| - name: Run linter | ||
| run: deno lint | ||
|
|
||
| - name: Run tests | ||
| run: deno test -A |
| Original file line number | Diff line number | Diff line change | ||||||
|---|---|---|---|---|---|---|---|---|
| @@ -0,0 +1,116 @@ | ||||||||
| # This workflow will build a docker container, publish it to Google Container | ||||||||
| # Registry, and deploy it to GKE when there is a push to the "main" | ||||||||
| # branch. | ||||||||
| # | ||||||||
| # To configure this workflow: | ||||||||
| # | ||||||||
| # 1. Enable the following Google Cloud APIs: | ||||||||
| # | ||||||||
| # - Artifact Registry (artifactregistry.googleapis.com) | ||||||||
| # - Google Kubernetes Engine (container.googleapis.com) | ||||||||
| # - IAM Credentials API (iamcredentials.googleapis.com) | ||||||||
| # | ||||||||
| # You can learn more about enabling APIs at | ||||||||
| # https://support.google.com/googleapi/answer/6158841. | ||||||||
| # | ||||||||
| # 2. Ensure that your repository contains the necessary configuration for your | ||||||||
| # Google Kubernetes Engine cluster, including deployment.yml, | ||||||||
| # kustomization.yml, service.yml, etc. | ||||||||
| # | ||||||||
| # 3. Create and configure a Workload Identity Provider for GitHub: | ||||||||
| # https://github.com/google-github-actions/auth#preferred-direct-workload-identity-federation. | ||||||||
| # | ||||||||
| # Depending on how you authenticate, you will need to grant an IAM principal | ||||||||
| # permissions on Google Cloud: | ||||||||
| # | ||||||||
| # - Artifact Registry Administrator (roles/artifactregistry.admin) | ||||||||
| # - Kubernetes Engine Developer (roles/container.developer) | ||||||||
| # | ||||||||
| # You can learn more about setting IAM permissions at | ||||||||
| # https://cloud.google.com/iam/docs/manage-access-other-resources | ||||||||
| # | ||||||||
| # 5. Change the values in the "env" block to match your values. | ||||||||
|
|
||||||||
| name: 'Build and Deploy to GKE' | ||||||||
|
|
||||||||
| on: | ||||||||
| push: | ||||||||
| branches: | ||||||||
| - '"main"' | ||||||||
|
|
||||||||
| env: | ||||||||
| PROJECT_ID: 'my-project' # TODO: update to your Google Cloud project ID | ||||||||
| GAR_LOCATION: 'us-central1' # TODO: update to your region | ||||||||
| GKE_CLUSTER: 'cluster-1' # TODO: update to your cluster name | ||||||||
| GKE_ZONE: 'us-central1-c' # TODO: update to your cluster zone | ||||||||
| DEPLOYMENT_NAME: 'gke-test' # TODO: update to your deployment name | ||||||||
| REPOSITORY: 'samples' # TODO: update to your Artifact Registry docker repository name | ||||||||
| IMAGE: 'static-site' | ||||||||
| WORKLOAD_IDENTITY_PROVIDER: 'projects/123456789/locations/global/workloadIdentityPools/my-pool/providers/my-provider' # TODO: update to your workload identity provider | ||||||||
|
|
||||||||
| jobs: | ||||||||
| setup-build-publish-deploy: | ||||||||
| name: 'Setup, Build, Publish, and Deploy' | ||||||||
| runs-on: 'ubuntu-latest' | ||||||||
| environment: 'production' | ||||||||
|
|
||||||||
| permissions: | ||||||||
| contents: 'read' | ||||||||
| id-token: 'write' | ||||||||
|
|
||||||||
| steps: | ||||||||
| - name: 'Checkout' | ||||||||
| uses: 'actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332' # actions/checkout@v4 | ||||||||
|
|
||||||||
| # Configure Workload Identity Federation and generate an access token. | ||||||||
| # | ||||||||
| # See https://github.com/google-github-actions/auth for more options, | ||||||||
| # including authenticating via a JSON credentials file. | ||||||||
| - id: 'auth' | ||||||||
| name: 'Authenticate to Google Cloud' | ||||||||
| uses: 'google-github-actions/auth@f112390a2df9932162083945e46d439060d66ec2' # google-github-actions/auth@v2 | ||||||||
| with: | ||||||||
| workload_identity_provider: '${{ env.WORKLOAD_IDENTITY_PROVIDER }}' | ||||||||
|
|
||||||||
| # Authenticate Docker to Google Cloud Artifact Registry | ||||||||
| - name: 'Docker Auth' | ||||||||
| uses: 'docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567' # docker/login-action@v3 | ||||||||
| with: | ||||||||
| username: 'oauth2accesstoken' | ||||||||
| password: '${{ steps.auth.outputs.auth_token }}' | ||||||||
| registry: '${{ env.GAR_LOCATION }}-docker.pkg.dev' | ||||||||
|
|
||||||||
| # Get the GKE credentials so we can deploy to the cluster | ||||||||
| - name: 'Set up GKE credentials' | ||||||||
| uses: 'google-github-actions/get-gke-credentials@6051de21ad50fbb1767bc93c11357a49082ad116' # google-github-actions/get-gke-credentials@v2 | ||||||||
| with: | ||||||||
| cluster_name: '${{ env.GKE_CLUSTER }}' | ||||||||
| location: '${{ env.GKE_ZONE }}' | ||||||||
|
|
||||||||
| # Build the Docker image | ||||||||
| - name: 'Build and push Docker container' | ||||||||
| run: |- | ||||||||
| DOCKER_TAG="${GAR_LOCATION}-docker.pkg.dev/${PROJECT_ID}/${REPOSITORY}/${IMAGE}:${GITHUB_SHA}" | ||||||||
|
|
||||||||
| docker build \ | ||||||||
| --tag "${DOCKER_TAG}" \ | ||||||||
| --build-arg GITHUB_SHA="${GITHUB_SHA}" \ | ||||||||
| --build-arg GITHUB_REF="${GITHUB_REF}" \ | ||||||||
| . | ||||||||
|
|
||||||||
| docker push "${DOCKER_TAG}" | ||||||||
|
|
||||||||
| # Set up kustomize | ||||||||
| - name: 'Set up Kustomize' | ||||||||
| run: |- | ||||||||
| curl -sfLo kustomize https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize%2Fv5.4.3/kustomize_v5.4.3_linux_amd64.tar.gz | ||||||||
|
||||||||
| curl -sfLo kustomize https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize%2Fv5.4.3/kustomize_v5.4.3_linux_amd64.tar.gz | |
| curl -sfLo kustomize.tar.gz https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize%2Fv5.4.3/kustomize_v5.4.3_linux_amd64.tar.gz | |
| tar -xzf kustomize.tar.gz kustomize |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,22 @@ | ||
| # This workflow will triage pull requests and apply a label based on the | ||
| # paths that are modified in the pull request. | ||
| # | ||
| # To use this workflow, you will need to set up a .github/labeler.yml | ||
| # file with configuration. For more information, see: | ||
| # https://github.com/actions/labeler | ||
|
|
||
| name: Labeler | ||
| on: [pull_request_target] | ||
|
|
||
| jobs: | ||
| label: | ||
|
|
||
| runs-on: ubuntu-latest | ||
| permissions: | ||
| contents: read | ||
| pull-requests: write | ||
|
|
||
| steps: | ||
| - uses: actions/labeler@v4 | ||
| with: | ||
| repo-token: "${{ secrets.GITHUB_TOKEN }}" |
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
| @@ -0,0 +1,93 @@ | ||||||
| # This workflow installs the latest version of Terraform CLI and configures the Terraform CLI configuration file | ||||||
| # with an API token for Terraform Cloud (app.terraform.io). On pull request events, this workflow will run | ||||||
| # `terraform init`, `terraform fmt`, and `terraform plan` (speculative plan via Terraform Cloud). On push events | ||||||
| # to the "main" branch, `terraform apply` will be executed. | ||||||
| # | ||||||
| # Documentation for `hashicorp/setup-terraform` is located here: https://github.com/hashicorp/setup-terraform | ||||||
| # | ||||||
| # To use this workflow, you will need to complete the following setup steps. | ||||||
| # | ||||||
| # 1. Create a `main.tf` file in the root of this repository with the `remote` backend and one or more resources defined. | ||||||
| # Example `main.tf`: | ||||||
| # # The configuration for the `remote` backend. | ||||||
| # terraform { | ||||||
| # backend "remote" { | ||||||
| # # The name of your Terraform Cloud organization. | ||||||
| # organization = "example-organization" | ||||||
| # | ||||||
| # # The name of the Terraform Cloud workspace to store Terraform state files in. | ||||||
| # workspaces { | ||||||
| # name = "example-workspace" | ||||||
| # } | ||||||
| # } | ||||||
| # } | ||||||
| # | ||||||
| # # An example resource that does nothing. | ||||||
| # resource "null_resource" "example" { | ||||||
| # triggers = { | ||||||
| # value = "A example resource that does nothing!" | ||||||
| # } | ||||||
| # } | ||||||
| # | ||||||
| # | ||||||
| # 2. Generate a Terraform Cloud user API token and store it as a GitHub secret (e.g. TF_API_TOKEN) on this repository. | ||||||
| # Documentation: | ||||||
| # - https://www.terraform.io/docs/cloud/users-teams-organizations/api-tokens.html | ||||||
| # - https://help.github.com/en/actions/configuring-and-managing-workflows/creating-and-storing-encrypted-secrets | ||||||
| # | ||||||
| # 3. Reference the GitHub secret in step using the `hashicorp/setup-terraform` GitHub Action. | ||||||
| # Example: | ||||||
| # - name: Setup Terraform | ||||||
| # uses: hashicorp/setup-terraform@v1 | ||||||
| # with: | ||||||
| # cli_config_credentials_token: ${{ secrets.TF_API_TOKEN }} | ||||||
|
|
||||||
| name: 'Terraform' | ||||||
|
|
||||||
| on: | ||||||
| push: | ||||||
| branches: [ "main" ] | ||||||
| pull_request: | ||||||
|
|
||||||
| permissions: | ||||||
| contents: read | ||||||
|
|
||||||
| jobs: | ||||||
| terraform: | ||||||
| name: 'Terraform' | ||||||
| runs-on: ubuntu-latest | ||||||
| environment: production | ||||||
|
|
||||||
| # Use the Bash shell regardless whether the GitHub Actions runner is ubuntu-latest, macos-latest, or windows-latest | ||||||
| defaults: | ||||||
| run: | ||||||
| shell: bash | ||||||
|
|
||||||
| steps: | ||||||
| # Checkout the repository to the GitHub Actions runner | ||||||
| - name: Checkout | ||||||
| uses: actions/checkout@v4 | ||||||
|
|
||||||
| # Install the latest version of Terraform CLI and configure the Terraform CLI configuration file with a Terraform Cloud user API token | ||||||
| - name: Setup Terraform | ||||||
| uses: hashicorp/setup-terraform@v1 | ||||||
| with: | ||||||
| cli_config_credentials_token: ${{ secrets.TF_API_TOKEN }} | ||||||
|
|
||||||
| # Initialize a new or existing Terraform working directory by creating initial files, loading any remote state, downloading modules, etc. | ||||||
| - name: Terraform Init | ||||||
| run: terraform init | ||||||
|
|
||||||
| # Checks that all Terraform configuration files adhere to a canonical format | ||||||
| - name: Terraform Format | ||||||
| run: terraform fmt -check | ||||||
|
|
||||||
| # Generates an execution plan for Terraform | ||||||
| - name: Terraform Plan | ||||||
| run: terraform plan -input=false | ||||||
|
|
||||||
| # On push to "main", build or change infrastructure according to Terraform configuration files | ||||||
| # Note: It is recommended to set up a required "strict" status check in your repository for "Terraform Cloud". See the documentation on "strict" required status checks for more information: https://help.github.com/en/github/administering-a-repository/types-of-required-status-checks | ||||||
| - name: Terraform Apply | ||||||
| if: github.ref == 'refs/heads/"main"' && github.event_name == 'push' | ||||||
|
||||||
| if: github.ref == 'refs/heads/"main"' && github.event_name == 'push' | |
| if: github.ref == 'refs/heads/main' && github.event_name == 'push' |
Copilot
AI
Apr 27, 2026
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This workflow is enabled on pushes to main and is set up to run terraform apply -auto-approve, which is risky for a repository that appears to be a catalog/examples repo (and may not have Terraform configured at all). Consider converting this to an example stored outside .github/workflows/, or gate apply behind workflow_dispatch + explicit approvals, and/or require a path filter so it only runs when Terraform configs change.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The branch name is wrapped in additional quotes (
'\"main\"'), which will prevent the workflow from triggering on pushes to themainbranch. Use- main.