Skip to content

Commit

Permalink
feat(init): create and test action
Browse files Browse the repository at this point in the history
  • Loading branch information
Marius Boden committed Oct 17, 2023
1 parent d25f770 commit 2ded3d8
Show file tree
Hide file tree
Showing 14 changed files with 600 additions and 0 deletions.
35 changes: 35 additions & 0 deletions .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
// For format details, see https://aka.ms/devcontainer.json. For config options, see the
// README at: https://github.com/devcontainers/templates/tree/main/src/ubuntu
{
"name": "Ubuntu",
// Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile
"image": "mcr.microsoft.com/devcontainers/base:jammy",
"features": {
"ghcr.io/devcontainers/features/azure-cli:1": {},
"ghcr.io/devcontainers/features/terraform:1": {},
"ghcr.io/devcontainers-contrib/features/actionlint:1": {},
"ghcr.io/devcontainers-contrib/features/terramate:1": {
"version": "v0.4.2"
},
"ghcr.io/dhoeric/features/terraform-docs:1": {},
"ghcr.io/guiyomh/features/vim:0": {}
},
"customizations": {
"vscode": {
"extensions": [
"github.vscode-github-actions",
"mineiros.terramate"
]
}
}
// Features to add to the dev container. More info: https://containers.dev/features.
// "features": {},
// Use 'forwardPorts' to make a list of ports inside the container available locally.
// "forwardPorts": [],
// Use 'postCreateCommand' to run commands after the container is created.
// "postCreateCommand": "uname -a",
// Configure tool-specific properties.
// "customizations": {},
// Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root.
// "remoteUser": "root"
}
11 changes: 11 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# Set update schedule for GitHub Actions

version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
# Check for updates to GitHub Actions every week
interval: "weekly"
reviewers:
- m4s-b3n
139 changes: 139 additions & 0 deletions .github/workflows/test-and-release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,139 @@
name: "Test & Release"

on:
push:
branches: ["main"]
pull_request:
branches: ["main"]

permissions:
id-token: write
contents: write
pull-requests: write

jobs:
test-setup:
name: Test Setup
runs-on: ubuntu-latest
strategy:
matrix:
terramate-version: ["0.4.0", "latest"]
terraform-version: ["1.5.7", "latest"]
plan-file: ["out.tfplan", "plan.out"]
tmp-file: ["tmp.txt", "file.tmp"]
comment-pull-request: ["true", "false"]
cleanup: ["true", "false"]
fail-fast: true
steps:
- name: Checkout
uses: actions/checkout@v4
with:
ref: ${{ github.head_ref }}
fetch-depth: 0
- name: Test
uses: "./"
with:
terraform-version: ${{ matrix.terraform-version }}
plan-file: ${{ matrix.plan-file }}
directory: "test/terraform"

test-args:
name: Test Arguments
runs-on: ubuntu-latest
strategy:
matrix:
terramate-args: ["--changed", ""]
terraform-common-args: ["-no-color", ""]
terraform-init-args: ["-upgrade", ""]
terraform-validate-args: ["-json", ""]
terraform-plan-args: ["-parallelism=3", ""]
terraform-apply-args: ["-parallelism=2", ""]
terraform-destroy-args: ["-compact-warnings", ""]
fail-fast: true
steps:
- name: Checkout
uses: actions/checkout@v4
with:
ref: ${{ github.head_ref }}
fetch-depth: 0
- name: Test
uses: "./"
with:
terramate-args: ${{ matrix.terramate-args }}
terraform-common-args: ${{ matrix.terraform-common-args }}
terraform-init-args: ${{ matrix.terraform-init-args }}
terraform-validate-args: ${{ matrix.terraform-validate-args }}
terraform-plan-args: ${{ matrix.terraform-plan-args }}
terraform-apply-args: ${{ matrix.terraform-apply-args }}
terraform-destroy-args: ${{ matrix.terraform-destroy-args }}
apply: true
destroy: true

test-jobs:
name: Test Jobs
runs-on: ubuntu-latest
strategy:
matrix:
lint: ["true", "false"]
generate: ["true", "false"]
validate: ["true", "false"]
plan: ["true", "false"]
apply: ["true", "false"]
destroy: ["true", "false"]
fail-fast: true
steps:
- name: Checkout
uses: actions/checkout@v4
with:
ref: ${{ github.head_ref }}
fetch-depth: 0
- name: Test With Setup And Init
uses: "./"
with:
lint: ${{ matrix.lint }}
validate: ${{ matrix.validate }}
plan: ${{ matrix.plan }}
apply: ${{ matrix.apply }}
destroy: ${{ matrix.destroy }}
- name: Test With Init Only
uses: "./"
with:
setup: false
init: true
lint: ${{ matrix.lint }}
validate: ${{ matrix.validate }}
plan: ${{ matrix.plan }}
apply: ${{ matrix.apply }}
destroy: ${{ matrix.destroy }}
- name: Test Without Setup And Init
uses: "./"
with:
setup: false
init: false
lint: ${{ matrix.lint }}
validate: ${{ matrix.validate }}
plan: ${{ matrix.plan }}
apply: ${{ matrix.apply }}
destroy: ${{ matrix.destroy }}

release:
name: Release
needs:
- test-setup
- test-args
- test-jobs
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install Semantic Release Plugins
run: |
npm install semantic-release-replace-plugin -D
npm install --save-dev semantic-release-major-tag
- name: Semantic Release
uses: cycjimmy/semantic-release-action@v4
with:
dry_run: ${{ github.event_name == 'pull_request' }}
ci: true
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
7 changes: 7 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,10 @@
# ci
out.tfplan
pr-comment.txt
_terramate_generated_*
.terraform.lock.hcl
.tools-version

# Local .terraform directories
**/.terraform/*

Expand Down
51 changes: 51 additions & 0 deletions .releaserc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
{
"branches": [
"main"
],
"tagFormat": "v${version}",
"plugins": [
"@semantic-release/commit-analyzer",
"semantic-release-major-tag",
"@semantic-release/release-notes-generator",
[
"@semantic-release/changelog",
{
"changelogFile": "CHANGELOG.md"
}
],
[
"semantic-release-replace-plugin",
{
"replacements": [
{
"files": [
"README.md"
],
"from": "\"m4s-b3n/terramate-all-in-one@v.*\"",
"to": "\"m4s-b3n/terramate-all-in-one@v${nextRelease.version}\"",
"results": [
{
"file": "README.md",
"hasChanged": true,
"numMatches": 2,
"numReplacements": 2
}
],
"countMatches": true
}
]
}
],
[
"@semantic-release/git",
{
"message": "chore(release): ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}",
"assets": [
"CHANGELOG.md",
"README.md"
]
}
],
"@semantic-release/github"
]
}
79 changes: 79 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,81 @@
# terramate-all-in-one

Run common terramate commands in a single GitHub action

## Usage

```yaml
name: Terramate Flow

on:
push:
branches: ["main"]
pull_request:
branches: ["main"]

permissions:
id-token: write
contents: write
pull-requests: write

jobs:
plan:
name: Plan
runs-on: ubuntu-latest
if: ${{ github.event_name == 'pull_request' }}
steps:
- name: Checkout
uses: actions/checkout@v4
with:
ref: ${{ github.head_ref }}
fetch-depth: 0
- name: Terramate
uses: m4s-b3n/[email protected]

apply:
name: Apply
runs-on: ubuntu-latest
if: ${{ github.event_name != 'pull_request' }}
steps:
- name: Checkout
uses: actions/checkout@v4
with:
ref: ${{ github.head_ref }}
fetch-depth: 0
- name: Terramate
uses: m4s-b3n/[email protected]
with:
apply: true
```
## Inputs
| Input | Description | Required | Default |
| --- | --- | --- | --- |
| directory | The directory where the Terraform configuration files are located | false | . |
| terramate-version | The version of Terramate to use | false | latest |
| terraform-version | The version of Terraform to use | false | latest |
| terramate-args | Arguments to pass to Terramate | false | --changed |
| terraform-common-args | Arguments to pass to Terraform | false | |
| terraform-init-args | Arguments to pass to Terraform init | false | |
| terraform-validate-args | Arguments to pass to Terraform validate | false | |
| terraform-plan-args | Arguments to pass to Terraform plan | false | |
| terraform-apply-args | Arguments to pass to Terraform apply | false | |
| terraform-destroy-args | Arguments to pass to Terraform destroy | false | |
| terraform-plan-file | Path to Terraform plan file | false | out.tfplan |
| temp-file | Path to preview comment file | false | tmp.txt |
| setup | Setup Terramate and Terraform | false | true |
| init | Initialize Terraform | false | true |
| lint | Run linting | false | true |
| generate | Generate code | false | true |
| validate | Validate Terraform | false | true |
| plan | Plan Terraform | false | true |
| apply | Apply Terraform | false | false |
| destroy | Destroy Terraform | false | false |
| comment-pull-request | Comment on Pull Request | false | true |
| github-token | GitHub token required for commenting on Pull Request" | false | `${{ secrets.GITHUB_TOKEN }} |`
| cleanup | Cleanup temporary files | false | true |

## Changelog

See the [Changelog](./CHANGELOG.md) file for details
Loading

0 comments on commit 2ded3d8

Please sign in to comment.