diff --git a/.github/workflows/terraform_provider.yml b/.github/workflows/terraform_provider_main.yml similarity index 98% rename from .github/workflows/terraform_provider.yml rename to .github/workflows/terraform_provider_main.yml index e504fe9b..d7c47e54 100644 --- a/.github/workflows/terraform_provider.yml +++ b/.github/workflows/terraform_provider_main.yml @@ -1,14 +1,10 @@ -name: Terraform Provider Checks +name: Terraform Provider Checks - main branch on: push: branches: - main - develop - pull_request: - branches: - - main - - develop env: TERRAFORM_VERSION: "1.2.6" REDISCLOUD_ACCESS_KEY: ${{ secrets.REDISCLOUD_ACCESS_KEY_STAGING }} diff --git a/.github/workflows/terraform_provider_pr.yml b/.github/workflows/terraform_provider_pr.yml new file mode 100644 index 00000000..309d801e --- /dev/null +++ b/.github/workflows/terraform_provider_pr.yml @@ -0,0 +1,161 @@ +name: Terraform Provider Checks - PR workflow + +on: + pull_request: + branches: + - main + - develop +env: + TERRAFORM_VERSION: "1.2.6" + REDISCLOUD_ACCESS_KEY: ${{ secrets.REDISCLOUD_ACCESS_KEY_STAGING }} + REDISCLOUD_SECRET_KEY: ${{ secrets.REDISCLOUD_SECRET_KEY_STAGING }} + REDISCLOUD_URL: ${{ secrets.REDISCLOUD_URL_STAGING }} + AWS_TEST_CLOUD_ACCOUNT_NAME: "${{ secrets.AWS_TEST_CLOUD_ACCOUNT_NAME_STAGING }}" + AWS_PEERING_REGION: ${{ secrets.AWS_PEERING_REGION }} + AWS_ACCOUNT_ID: ${{ secrets.AWS_ACCOUNT_ID }} + AWS_VPC_CIDR: ${{ secrets.AWS_VPC_CIDR }} + AWS_VPC_ID: ${{ secrets.AWS_VPC_ID }} + AWS_TEST_TGW_ID: ${{ secrets.AWS_TEST_TGW_ID_STAGING }} + TF_ACC: true + TF_LOG: info + AWS_ACCESS_KEY_ID: ${{ secrets.CLOUD_ACCOUNT_KEY }} + AWS_ACCESS_SECRET_KEY: ${{ secrets.CLOUD_ACCOUNT_SECRET }} + AWS_CONSOLE_USERNAME: ${{ secrets.CLOUD_ACCOUNT_USERNAME }} + AWS_CONSOLE_PASSWORD: ${{ secrets.CLOUD_ACCOUNT_PASS }} + AWS_SIGNIN_URL: ${{ secrets.CLOUD_ACCOUNT_URL }} + GCP_VPC_PROJECT: ${{ secrets.GCP_VPC_PROJECT }} + GCP_VPC_ID: ${{ secrets.GCP_VPC_ID }} + GCP_PROJECT_ID: ${{ secrets.GCP_PROJECT_ID }} + GOOGLE_CREDENTIALS: ${{ secrets.GOOGLE_CREDENTIALS }} + +concurrency: + group: \{\{ github\.workflow \}\}\-{{ github.ref }} + cancel-in-progress: true + +jobs: + go_build: + name: go build + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + - uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3 + continue-on-error: true + id: cache-terraform-plugin-dir + timeout-minutes: 2 + with: + path: terraform-plugin-dir + key: ${{ runner.os }}-terraform-plugin-dir-${{ hashFiles('go.sum') }}-${{ hashFiles('provider/**') }} + - if: steps.cache-terraform-plugin-dir.outputs.cache-hit != 'true' || steps.cache-terraform-plugin-dir.outcome == 'failure' + uses: actions/setup-go@0aaccfd150d50ccaeb58ebd88d36e91967a5f35b # v5.4.0 + with: + go-version-file: go.mod + - if: steps.cache-terraform-plugin-dir.outputs.cache-hit != 'true' || steps.cache-terraform-plugin-dir.outcome == 'failure' + name: go mod download + run: go mod download + - if: steps.cache-terraform-plugin-dir.outputs.cache-hit != 'true' || steps.cache-terraform-plugin-dir.outcome == 'failure' + name: go build + run: go build -o terraform-plugin-dir/registry.terraform.io/RedisLabs/rediscloud/99.99.99/$(go env GOOS)_$(go env GOARCH)/terraform-provider-rediscloud . + + terraform_providers_schema: + name: terraform providers schema + needs: [go_build] + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + - uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3 + continue-on-error: true + id: cache-terraform-providers-schema + timeout-minutes: 2 + with: + path: terraform-providers-schema + key: ${{ runner.os }}-terraform-providers-schema-${{ hashFiles('go.sum') }}-${{ hashFiles('provider/**') }} + - if: steps.cache-terraform-providers-schema.outputs.cache-hit != 'true' || steps.cache-terraform-providers-schema.outcome == 'failure' + uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3 + timeout-minutes: 2 + with: + path: terraform-plugin-dir + key: ${{ runner.os }}-terraform-plugin-dir-${{ hashFiles('go.sum') }}-${{ hashFiles('provider/**') }} + - if: steps.cache-terraform-providers-schema.outputs.cache-hit != 'true' || steps.cache-terraform-providers-schema.outcome == 'failure' + uses: hashicorp/setup-terraform@b9cd54a3c349d3f38e8881555d616ced269862dd # v3.1.2 + with: + terraform_version: ${{ env.TERRAFORM_VERSION }} + terraform_wrapper: false + - if: steps.cache-terraform-providers-schema.outputs.cache-hit != 'true' || steps.cache-terraform-providers-schema.outcome == 'failure' + name: terraform init + run: | + # We need a file to initialize the provider + cat <> providers.tf + terraform { + required_providers { + rediscloud = { + source = "RedisLabs/rediscloud" + version = "99.99.99" + } + } + } + EOT + echo 'resource "rediscloud_subscription" "example" {}' > example.tf + terraform init -plugin-dir terraform-plugin-dir + - if: steps.cache-terraform-providers-schema.outputs.cache-hit != 'true' || steps.cache-terraform-providers-schema.outcome == 'failure' + name: terraform providers schema + run: | + mkdir terraform-providers-schema + terraform providers schema -json > terraform-providers-schema/schema.json + + go_test_smoke_aa_db: + name: go test smoke aa db + needs: [go_build] + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + - uses: actions/setup-go@0aaccfd150d50ccaeb58ebd88d36e91967a5f35b # v5.4.0 + with: + go-version-file: go.mod + - run: EXECUTE_TESTS=true make testacc TESTARGS='-run="TestAccResourceRedisCloudActiveActiveDatabase_CRUDI"' + + + go_test_smoke_essentials_db: + name: go test smoke essentials db + needs: [go_build] + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + - uses: actions/setup-go@0aaccfd150d50ccaeb58ebd88d36e91967a5f35b # v5.4.0 + with: + go-version-file: go.mod + - run: EXECUTE_TESTS=true make testacc TESTARGS='-run="TestAccResourceRedisCloudEssentialsDatabase_CRUDI"' + + + go_test_smoke_pro_db: + name: go test smoke pro db + needs: [go_build] + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + - uses: actions/setup-go@0aaccfd150d50ccaeb58ebd88d36e91967a5f35b # v5.4.0 + with: + go-version-file: go.mod + - run: EXECUTE_TESTS=true make testacc TESTARGS='-run="TestAccResourceRedisCloudProDatabase_CRUDI"' + + + go_test_smoke_misc: + name: go test smoke misc + needs: [go_build] + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + - uses: actions/setup-go@0aaccfd150d50ccaeb58ebd88d36e91967a5f35b # v5.4.0 + with: + go-version-file: go.mod + - run: EXECUTE_TESTS=true make testacc TESTARGS='-run="TestAccResourceRedisCloud(PrivateServiceConnect_CRUDI|AclRule_CRUDI)"' + + tfproviderlint: + name: tfproviderlint + needs: [go_build] + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + - uses: actions/setup-go@0aaccfd150d50ccaeb58ebd88d36e91967a5f35b # v5.4.0 + with: + go-version-file: go.mod + - run: make tfproviderlint