Terraform & OpenTofu Acceptance Tests #3
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
on: | |
pull_request: | |
branches: | |
- main | |
types: [opened,synchronize] | |
paths: | |
- '**.go' | |
workflow_dispatch: | |
name: Terraform & OpenTofu Acceptance Tests | |
jobs: | |
acceptance-tests-matrix: | |
name: ${{ matrix.cli }} | |
runs-on: ubuntu-latest | |
continue-on-error: false | |
environment: development | |
strategy: | |
fail-fast: true | |
matrix: | |
cli: [terraform, tofu] | |
outputs: | |
tf_version: ${{ steps.get_terraform_cli_version.outputs.version }} | |
tofu_version: ${{ steps.get_opentofu_cli_version.outputs.version }} | |
artifactory_version: ${{ steps.run_artifactory_container.outputs.version }} | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Unshallow | |
run: git fetch --prune --unshallow | |
- name: Set up Go | |
uses: actions/setup-go@v5 | |
with: | |
go-version: 1.21 | |
- name: Install Helm | |
uses: azure/setup-helm@v4.2.0 | |
- name: Install Terraform CLI | |
uses: hashicorp/setup-terraform@v3 | |
if: ${{ matrix.cli == 'terraform' }} | |
- name: Get Terraform CLI version | |
id: get_terraform_cli_version | |
if: ${{ matrix.cli == 'terraform' }} | |
run: | | |
TF_VERSION=$(terraform -v -json | jq -r .terraform_version) | |
echo $TF_VERSION | |
echo "version=$TF_VERSION" >> "$GITHUB_OUTPUT" | |
- name: Install OpenTofu CLI | |
uses: opentofu/setup-opentofu@v1 | |
if: ${{ matrix.cli == 'tofu' }} | |
with: | |
tofu_wrapper: false | |
- name: Get OpenTofu CLI version | |
id: get_opentofu_cli_version | |
if: ${{ matrix.cli == 'tofu' }} | |
run: | | |
echo "TF_ACC_TERRAFORM_PATH=$(which tofu)" >> "$GITHUB_ENV" | |
echo "TF_ACC_PROVIDER_NAMESPACE=hashicorp" >> "$GITHUB_ENV" | |
echo "TF_ACC_PROVIDER_HOST=registry.opentofu.org" >> "$GITHUB_ENV" | |
TOFU_VERSION=$(tofu -v -json | jq -r .terraform_version) | |
echo $TOFU_VERSION | |
echo "version=$TOFU_VERSION" >> "$GITHUB_OUTPUT" | |
- name: Install GoReleaser | |
uses: goreleaser/goreleaser-action@v6 | |
with: | |
install-only: true | |
- name: Execute acceptance tests | |
run: make acceptance | |
- name: Install provider | |
run: | | |
export PROVIDER_VERSION=$(git describe --tags --abbrev=0 | sed -n 's/v\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1.\2.\3/p') | |
cat sample.tf | sed -e "s/version =.*/version = \"${PROVIDER_VERSION}\"/g" > sample.tf.tmp | |
cp sample.tf.tmp sample.tf && rm sample.tf.tmp | |
TERRAFORM_CLI=${{ matrix.cli }} make install | |
- name: Send workflow status to Slack | |
uses: slackapi/slack-github-action@v1.26.0 | |
if: always() && ${{ steps.run_artifactory_container.outcome == 'success' }} | |
with: | |
payload: | | |
{ | |
"text": "${{ github.workflow }} https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}/job/${{ github.job }} ${{ matrix.cli }} GitHub Action result: ${{ job.status == 'success' && ':white_check_mark:' || ':x:' }}\n${{ github.event.pull_request.html_url || github.event.head_commit.url }}", | |
"blocks": [ | |
{ | |
"type": "section", | |
"text": { | |
"type": "mrkdwn", | |
"text": "${{ github.workflow }} <https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}/job/${{ github.job }}|${{ matrix.cli }} GitHub Action result>: ${{ job.status == 'success' && ':white_check_mark:' || ':x:' }}\n${{ github.event.pull_request.html_url || github.event.head_commit.url }}" | |
} | |
} | |
] | |
} | |
env: | |
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_PR_WEBHOOK }} | |
SLACK_WEBHOOK_TYPE: INCOMING_WEBHOOK | |
update-changelog: | |
runs-on: ubuntu-latest | |
needs: acceptance-tests-matrix | |
if: ${{ github.event_name == 'pull_request' }} && ${{ needs.acceptance-tests-matrix.result == 'success' }} | |
permissions: | |
contents: write | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
ref: ${{ github.event.pull_request.head.ref }} | |
- name: Update CHANGELOG and push commit | |
env: | |
ARTIFACTORY_VERSION: ${{ needs.acceptance-tests-matrix.outputs.artifactory_version }} | |
TERRAFORM_VERSION: ${{ needs.acceptance-tests-matrix.outputs.tf_version }} | |
OPENTOFU_VERSION: ${{ needs.acceptance-tests-matrix.outputs.tofu_version }} | |
run: | | |
echo "Adding Artifactory version to CHANGELOG.md" | |
sed -i -E "0,/(##\s.+\..+\..+\s\(.+\)).*/ s/(##\s.+\..+\..+\s\(.+\)).*/\1. Tested on Artifactory $ARTIFACTORY_VERSION with Terraform $TERRAFORM_VERSION and OpenTofu $OPENTOFU_VERSION/" CHANGELOG.md | |
head -10 CHANGELOG.md | |
git add CHANGELOG.md | |
export REGEX="Changes to be committed*" | |
export GIT_STATUS=$(git status) | |
if [[ ${GIT_STATUS} =~ ${REGEX} ]]; then | |
echo "Commiting changes" | |
git config --global user.name 'JFrog CI' | |
git config --global user.email 'jfrog-solutions-ci+1@jfrog.com' | |
git config --get user.name | |
git config --get user.email | |
git commit --author="JFrog CI <jfrog-solutions-ci+1@jfrog.com>" -m "JFrog Pipelines - Add Artifactory version to CHANGELOG.md" | |
git push | |
else | |
echo "There is nothing to commit: Artifactory version hadn't changed." | |
fi | |
- name: Send workflow status to Slack | |
uses: slackapi/slack-github-action@v1.26.0 | |
if: success() | |
with: | |
payload: | | |
{ | |
"text": "Terraform Provider Platform. A new PR was submitted by ${{ github.event.pull_request.user.login }} - ${{ github.event.pull_request.html_url }}, branch ${{ github.event.pull_request.base.ref }}. Changes tested successfully. <@U01H1SLSPA8> or <@UNDRUL1EU> please, review and merge.", | |
"blocks": [ | |
{ | |
"type": "section", | |
"text": { | |
"type": "mrkdwn", | |
"text": "<http://github.com/${{ github.repository }}|Terraform Provider Platform>. A new PR was submitted by *${{ github.event.pull_request.user.login }}* - <${{ github.event.pull_request.html_url }}|${{ github.event.pull_request.title }}>, branch *${{ github.event.pull_request.base.ref }}*. Changes tested successfully. <@U01H1SLSPA8> or <@UNDRUL1EU> please, review and merge." | |
} | |
} | |
] | |
} | |
env: | |
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_PR_WEBHOOK }} | |
SLACK_WEBHOOK_TYPE: INCOMING_WEBHOOK |