https://github.com/bruceharrison1984/terraform-push-module
GitHub action for pushing private Terraform modules to TFC/TFE
https://github.com/bruceharrison1984/terraform-push-module
hcp-terraform hcp-terraform-module module terraform tfe tfe-module
Last synced: 25 days ago
JSON representation
GitHub action for pushing private Terraform modules to TFC/TFE
- Host: GitHub
- URL: https://github.com/bruceharrison1984/terraform-push-module
- Owner: bruceharrison1984
- License: mit
- Created: 2024-08-29T20:26:39.000Z (almost 2 years ago)
- Default Branch: main
- Last Pushed: 2025-02-15T00:33:24.000Z (over 1 year ago)
- Last Synced: 2025-12-28T22:00:01.241Z (6 months ago)
- Topics: hcp-terraform, hcp-terraform-module, module, terraform, tfe, tfe-module
- Language: TypeScript
- Homepage:
- Size: 343 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# terraform-push-module
> [!IMPORTANT]
> This Github Action will upload a **private** Terraform module to HCP Terraform or Terraform Enterprise.
>
> **Public modules are not supported since the workflow doesn't make sense for a CI/CD context.**
- The module _must_ adhere to [Hashicorp Standard Module guidelines](https://developer.hashicorp.com/terraform/language/modules/develop/structure)
- At a minimum, your HCL entry point must be in the root of the repository
- Only `**/*.tf` and `**/README.md` will be included in the uploaded bundle
- Nested sub-modules will be included in the bundle
- Only single modules can be used, module mono-repos are not supported
- Version numbers are entirely managed by you, there is no auto-incrementing
- If a module fails to upload, the version will be deleted from HCP/TFE to avoid conflicts on subsequent runs
## Configuration
### Inputs
| Setting | Description | Example | Required |
| ---------------- | ---------------------------------------------------------------------- | ---------------------------- | -------- |
| serverUri | The root URI of the HCP Terraform/Enterprise server | `https://app.terraform.io` | Y |
| organizationName | The name of the organization this module belongs to | `my-org` | Y |
| moduleName | The name of the module | `my-special-module` | Y |
| versionString | The version tag that will be applied to the module (semver-compatible) | `v1.0.1 \| 1.0.1` | Y |
| providerName | The name of the provider associated with this module | `aws \| gcp \| azure \| etc` | Y |
| authToken | HCP/TFE token with sufficient permissions to manage modules | `` | Y |
| isNoCode | Enable `no-code` workflows for this module. Default is `false` | `true/false` | Y |
### Outputs
| Name | Description |
| --------------- | --------------------------------------------------------------------------------------- |
| archiveFilepath | The file path to the tarball that contains the module code that was uploaded to HCP/TFE |
| moduleVersion | The name of the module that was created |
| moduleName | The version number of the module that was created |
## Example
> [!TIP]
> Utilize the `actions/upload-artifact` action to save the module tarball as a GitHub artifact after upload to TFC/TFE
```yaml
name: Terraform Module Push
on:
workflow_dispatch:
jobs:
actionlint:
name: Push Terraform Module
runs-on: ubuntu-22.04
steps:
- name: Checkout
uses: actions/checkout@44c2b7a8a4ea60a981eaca3cf939b5f4305c123b # v4.1.5
- id: terraform-push-module
uses: bruceharrison1984/terraform-push-module@main ## ensure using latest version
with:
serverUri: https://app.terraform.io
organizationName: my-hcp-org
moduleName: gcp-artifact-registry
authToken: ${{ secrets.TFE_TOKEN }} ## token should be securely stored in GitHub Secrets
providerName: aws
versionString: v0.0.2 ## version should be sourced from environment
isNoCode: "false"
## optionally save the tarball to Github Artifacts
- uses: actions/upload-artifact@v4
with:
name: ${{ steps.terraform-push-module.outputs.moduleName }}@${{ steps.terraform-push-module.outputs.moduleVersion }}
path: ${{ steps.terraform-push-module.outputs.archiveFilepath }}
```
## Job Summary
A detailed job summary and link to the created module can be found in the Github Action Summary page:
