diff --git a/.github/workflows/build-image.yaml b/.github/workflows/build-image.yaml index 3096d89..a79e218 100644 --- a/.github/workflows/build-image.yaml +++ b/.github/workflows/build-image.yaml @@ -5,6 +5,8 @@ on: release: types: - created + schedule: + - cron: '00 00 * * *' jobs: docker: @@ -31,6 +33,7 @@ jobs: echo IMAGE_TAG=$([ ${{ github.ref_type }} == 'tag' ] && echo ${{ github.ref_name }} || echo 'latest') >> $GITHUB_ENV - name: Build and Push release to ghcr.io + if: github.event_name != 'schedule' uses: docker/build-push-action@v5 with: context: . @@ -46,6 +49,22 @@ jobs: secrets: | "github_token=${{ secrets.GITHUB_TOKEN }}" + - name: Build and Push nightly to ghcr.io + if: github.event_name == 'schedule' + uses: docker/build-push-action@v5 + with: + context: . + build-args: | + INSTALL_ALL=true + platforms: linux/amd64,linux/arm64 + push: true + tags: | + ghcr.io/${{ github.repository }}:nightly + # Fix multi-platform: https://github.com/docker/buildx/issues/1533 + provenance: false + secrets: | + "github_token=${{ secrets.GITHUB_TOKEN }}" + - name: Login to DockerHub Container Registry uses: docker/login-action@v4 with: @@ -54,6 +73,7 @@ jobs: password: ${{ secrets.DOCKERHUB_PASSWORD }} - name: Build and Push release to DockerHub + if: github.event_name != 'schedule' uses: docker/build-push-action@v5 with: context: . @@ -65,3 +85,16 @@ jobs: registry.hub.docker.com/tofuutils/pre-commit-opentofu:${{ env.IMAGE_TAG }} registry.hub.docker.com/tofuutils/pre-commit-opentofu:latest provenance: false + + - name: Build and Push nightly to DockerHub + if: github.event_name == 'schedule' + uses: docker/build-push-action@v5 + with: + context: . + build-args: | + INSTALL_ALL=true + platforms: linux/amd64,linux/arm64 + push: true + tags: | + registry.hub.docker.com/tofuutils/pre-commit-opentofu:nightly + provenance: false diff --git a/CHANGELOG.md b/CHANGELOG.md index 6f4cca5..d702c9e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,13 +2,6 @@ All notable changes to this project will be documented in this file. -## [2.4.2](https://github.com/tofuutils/pre-commit-opentofu/compare/v2.4.1...v2.4.2) (2026-06-12) - - -### Bug Fixes - -* **hooks:** make env var regex portable ([caab3b8](https://github.com/tofuutils/pre-commit-opentofu/commit/caab3b8701405a446489a7864f91a2c9f281eee0)) - ## [2.4.1](https://github.com/tofuutils/pre-commit-opentofu/compare/v2.4.0...v2.4.1) (2026-06-01) diff --git a/README.md b/README.md index 748b3b5..c8434c9 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Collection of git hooks for OpenTofu to be used with [pre-commit framework](http://pre-commit.com/) -[![Github tag](https://img.shields.io/github/tag/tofuutils/pre-commit-opentofu.svg)](https://github.com/tofuutils/pre-commit-opentofu/releases) ![maintenance status](https://img.shields.io/maintenance/yes/2026.svg) [![Help Contribute to Open Source](https://www.codetriage.com/tofuutils/pre-commit-opentofu/badges/users.svg)](https://www.codetriage.com/tofuutils/pre-commit-opentofu) +[![Github tag](https://img.shields.io/github/tag/tofuutils/pre-commit-opentofu.svg)](https://github.com/tofuutils/pre-commit-opentofu/releases) ![maintenance status](https://img.shields.io/maintenance/yes/2024.svg) [![Help Contribute to Open Source](https://www.codetriage.com/tofuutils/pre-commit-opentofu/badges/users.svg)](https://www.codetriage.com/tofuutils/pre-commit-opentofu) Want to contribute? Check [open issues](https://github.com/tofuutils/pre-commit-opentofu/issues?q=label%3A%22good+first+issue%22+is%3Aopen+sort%3Aupdated-desc) and [contributing notes](/.github/CONTRIBUTING.md). @@ -37,7 +37,7 @@ If you are using `pre-commit-opentofu` already or want to support its developmen * [tfupdate](#tfupdate) * [Docker Usage](#docker-usage) * [File Permissions](#file-permissions) - * [Download OpenTofu modules from private GitHub repositories](#download-opentofu-modules-from-private-github-repositories) + * [Download OpenTofu modules from private GitHub repositories](#download-tofu-modules-from-private-github-repositories) * [Authors](#authors) * [License](#license) @@ -301,19 +301,19 @@ There are several [pre-commit](https://pre-commit.com/) hooks to keep OpenTofu c | ------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------ | | `checkov` and `tofu_checkov` | [checkov](https://github.com/bridgecrewio/checkov) static analysis of OpenTofu templates to spot potential security issues. [Hook notes](#checkov-deprecated-and-tofu_checkov) | `checkov`
Ubuntu deps: `python3`, `python3-pip` | | `infracost_breakdown` | Check how much your infra costs with [infracost](https://github.com/infracost/infracost). [Hook notes](#infracost_breakdown) | `infracost`, `jq`, [Infracost API key](https://www.infracost.io/docs/#2-get-api-key) | -| `tofu_docs` | Inserts input and output documentation into `README.md`. Recommended. [Hook notes](#tofu_docs) | `terraform-docs` | -| `tofu_docs_replace` | Runs `terraform-docs` and pipes the output directly to README.md. **DEPRECATED**. [Hook notes](#tofu_docs_replace-deprecated) | `python3`, `terraform-docs` | -| `tofu_docs_without_`
`aggregate_type_defaults` | Inserts input and output documentation into `README.md` without aggregate type defaults. Hook notes same as for [tofu_docs](#tofu_docs) | `tofu-docs` | -| `tofu_fmt` | Reformat all OpenTofu configuration files to a canonical format. [Hook notes](#tofu_fmt) | - | -| `tofu_providers_lock` | Updates provider signatures in [dependency lock files](https://www.terraform.io/docs/cli/commands/providers/lock.html). [Hook notes](#tofu_providers_lock) | - | -| `tofu_tflint` | Validates all OpenTofu configuration files with [TFLint](https://github.com/terraform-linters/tflint). [Available TFLint rules](https://github.com/terraform-linters/tflint/tree/master/docs/rules#rules). [Hook notes](#tofu_tflint). | `tflint` | -| `tofu_tfsec` | [TFSec](https://github.com/aquasecurity/tfsec) static analysis of terraform templates to spot potential security issues. **DEPRECATED**, use `tofu_trivy`. [Hook notes](#tofu_tfsec-deprecated) | `tfsec` | -| `tofu_trivy` | [Trivy](https://github.com/aquasecurity/trivy) static analysis of terraform templates to spot potential security issues. [Hook notes](#tofu_trivy) | `trivy` | +| `tofu_docs` | Inserts input and output documentation into `README.md`. Recommended. [Hook notes](#terraform_docs) | `terraform-docs` | +| `tofu_docs_replace` | Runs `terraform-docs` and pipes the output directly to README.md. **DEPRECATED**. [Hook notes](#terraform_docs_replace-deprecated) | `python3`, `terraform-docs` | +| `tofu_docs_without_`
`aggregate_type_defaults` | Inserts input and output documentation into `README.md` without aggregate type defaults. Hook notes same as for [tofu_docs](#terraform_docs) | `tofu-docs` | +| `tofu_fmt` | Reformat all OpenTofu configuration files to a canonical format. [Hook notes](#terraform_fmt) | - | +| `tofu_providers_lock` | Updates provider signatures in [dependency lock files](https://www.terraform.io/docs/cli/commands/providers/lock.html). [Hook notes](#terraform_providers_lock) | - | +| `tofu_tflint` | Validates all OpenTofu configuration files with [TFLint](https://github.com/terraform-linters/tflint). [Available TFLint rules](https://github.com/terraform-linters/tflint/tree/master/docs/rules#rules). [Hook notes](#terraform_tflint). | `tflint` | +| `tofu_tfsec` | [TFSec](https://github.com/aquasecurity/tfsec) static analysis of terraform templates to spot potential security issues. **DEPRECATED**, use `tofu_trivy`. [Hook notes](#terraform_tfsec-deprecated) | `tfsec` | +| `tofu_trivy` | [Trivy](https://github.com/aquasecurity/trivy) static analysis of terraform templates to spot potential security issues. [Hook notes](#terraform_trivy) | `trivy` | | `tofu_validate` | Validates all Terraform configuration files. [Hook notes](#tofu_validate) | `jq`, only for `--retry-once-with-cleanup` flag | | `terragrunt_fmt` | Reformat all [Terragrunt](https://github.com/gruntwork-io/terragrunt) configuration files (`*.hcl`) to a canonical format. | `terragrunt` | | `terragrunt_validate` | Validates all [Terragrunt](https://github.com/gruntwork-io/terragrunt) configuration files (`*.hcl`) | `terragrunt` | | `terragrunt_validate_inputs` | Validates Terragrunt unused and undefined inputs. | `terragrunt` | -| `tofu_wrapper_module_for_each` | Generates OpenTofu wrappers with `for_each` in module. [Hook notes](#tofu_wrapper_module_for_each) | `hcledit` | +| `tofu_wrapper_module_for_each` | Generates OpenTofu wrappers with `for_each` in module. [Hook notes](#terraform_wrapper_module_for_each) | `hcledit` | | `terrascan` | [terrascan](https://github.com/tenable/terrascan) Detect compliance and security violations. [Hook notes](#terrascan) | `terrascan` | | `tfupdate` | [tfupdate](https://github.com/minamijoyo/tfupdate) Update version constraints of OpenTofu core, providers, and modules. [Hook notes](#tfupdate) | `tfupdate` | diff --git a/hooks/_common.sh b/hooks/_common.sh index 59236fd..5808c19 100644 --- a/hooks/_common.sh +++ b/hooks/_common.sh @@ -112,7 +112,7 @@ function common::parse_and_export_env_vars { while true; do # Check if at least 1 env var exists in `$arg` # shellcheck disable=SC2016 # '${' should not be expanded - if [[ "$arg" =~ '${'[A-Z_][A-Za-z0-9_]*'}' ]]; then + if [[ "$arg" =~ .*'${'[A-Z_][A-Z0-9_]*'}'.* ]]; then # Get `ENV_VAR` from `.*${ENV_VAR}.*` local env_var_name=${arg#*$\{} env_var_name=${env_var_name%%\}*}