Skip to content

Create github oidc role iam module #18

Create github oidc role iam module

Create github oidc role iam module #18

Workflow file for this run

name: Opentofu-Checks
on:
push:
branches: [ main ]
pull_request:
types: [opened, reopened, synchronize]
branches:
- main
permissions:
contents: read
pull-requests: write
jobs:
changed-files:
runs-on: ubuntu-latest
outputs:
matrix: ${{ steps.changed-files.outputs.all_changed_files }}
any_changed: ${{ steps.changed-files.outputs.any_changed }}
steps:
- name: 'Checkout'
uses: actions/checkout@v5
with:
ref: ${{github.event.pull_request.head.sha }}
- name: Get changed files
id: changed-files
uses: tj-actions/changed-files@v45
with:
dir_names: true
matrix: true
quotepath: false
files: |
**/**.tf
files_ignore: |
**/examples/**
**/tests/**
**/docs/**
- name: List all changed files
run: echo '${{ steps.changed-files.outputs.all_changed_files }}'
tflint:
runs-on: ubuntu-latest
needs: [changed-files ]
if: ${{needs.changed-files.outputs.any_changed == 'true'}}
strategy:
matrix:
dirs: ${{ fromJSON(needs.changed-files.outputs.matrix) }}
max-parallel: 4
steps:
- name: Checkout
uses: actions/checkout@v5
with:
ref: ${{github.event.pull_request.head.sha }}
- uses: actions/cache@v4
name: Cache plugin dir
with:
path: ~/.tflint.d/plugins
key: ubuntu-latest-tflint-${{ hashFiles('.tflint.hcl') }}
- uses: terraform-linters/setup-tflint@v4
name: Setup TFLint
with:
tflint_wrapper: true
- name: Show version
run: tflint --version
- name: Init TFLint
run: |
export TFLINT_CONFIG=$(realpath .tflint.hcl)
tflint --init --config $TFLINT_CONFIG
env:
# https://github.com/terraform-linters/tflint/blob/master/docs/user-guide/plugins.md#avoiding-rate-limiting
GITHUB_TOKEN: ${{ github.token }}
- name: Run TFLint
id: tflint
run: |
export TFLINT_CONFIG=$(realpath .tflint.hcl)
tflint -f compact --chdir ${{ matrix.dirs }} --config $TFLINT_CONFIG
- if: always()
run: echo ${{ steps.tflint.outputs.stdout }}
opentofu:
runs-on: ubuntu-latest
needs: [changed-files ]
if: ${{needs.changed-files.outputs.any_changed == 'true'}}
strategy:
matrix:
dirs: ${{ fromJSON(needs.changed-files.outputs.matrix) }}
max-parallel: 4
steps:
- name: 'Checkout'
uses: actions/checkout@v5
with:
ref: ${{github.event.pull_request.head.sha }}
- uses: opentofu/setup-opentofu@v1
with:
tofu_version_file: .opentofu-version
- name: OpenTofu fmt
id: fmt
run: tofu -chdir=${{ matrix.dirs }} fmt -check
- name: OpenTofu Init
if: always()
id: init
run: tofu -chdir=${{ matrix.dirs }} init
- name: OpenTofu Validate
if: always()
id: validate
run: tofu -chdir=${{ matrix.dirs }} validate -no-color
- name: OpenTofu Test
if: always()
id: test
run: tofu -chdir=${{ matrix.dirs }} test -no-color
- uses: actions/github-script@v6
if: ${{ github.event_name == 'pull_request' && always() }}
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
// 1. Retrieve existing bot comments for the PR
const { data: comments } = await github.rest.issues.listComments({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
})
const botComment = comments.find(comment => {
return comment.user.type === 'Bot' && comment.body.includes('OpenTofu automated tests for module in \`${{ matrix.dirs }}\` directory')
})
// 2. Prepare format of the comment
const output = `#### OpenTofu automated tests for module in \`${{ matrix.dirs }}\` directory
#### OpenTofu Initialization ⚙️\`${{ steps.init.outcome }}\`
#### OpenTofu Validation 🤖\`${{ steps.validate.outcome }}\`
<details><summary>Validation Output</summary>
\`\`\`\n
${{ steps.validate.outputs.stdout }}
\`\`\`
</details>
#### OpenTofu Format 🖌\`${{ steps.fmt.outcome }}\`
<details><summary>Format Check Output</summary>
\`\`\`\n
${{ steps.fmt.outputs.stdout }}
\`\`\`
</details>
#### OpenTofu Tests 📖\`${{ steps.test.outcome }}\`
<details><summary>OpenTofu Test Output</summary>
\`\`\`\n
${{ steps.test.outputs.stdout }}
\`\`\`
</details>
*Pusher: @${{ github.actor }}, Action: \`${{ github.event_name }}\`, Working Directory: \`${{ matrix.dirs }}\`, Workflow: \`${{ github.workflow }}\`*`;
// 3. If we have a comment, update it, otherwise create a new one
if (botComment) {
github.rest.issues.updateComment({
owner: context.repo.owner,
repo: context.repo.repo,
comment_id: botComment.id,
body: output
})
} else {
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: output
})
}