diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 3040258..11ec0f8 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -26,9 +26,19 @@ jobs: gpg_private_key: ${{ secrets.GPG_PRIVATE_KEY }} passphrase: ${{ secrets.GPG_PASSPHRASE }} - name: Run GoReleaser + id: goreleaser uses: https://github.com/goreleaser/goreleaser-action@v6 env: GITEA_TOKEN: ${{ secrets.PACKAGES_TOKEN }} GPG_FINGERPRINT: ${{ steps.import_gpg.outputs.fingerprint }} with: args: release --clean + + - name: Generate and upload provider.json + run: | + echo '${{steps.goreleaser.outputs.artifacts}}' >artifacts.json + echo '${{steps.goreleaser.outputs.metadata}}' >metadata.json + ./generate-provider-json.sh artifacts.json metadata.json + env: + TERRALIST_API: https://terralist.garm-provider-test.t09.de/v1/api + TERRALIST_API_KEY: ${{ secrets.TERRALIST_API_KEY }} diff --git a/README.md b/README.md index d2f1b50..e94483b 100644 --- a/README.md +++ b/README.md @@ -50,17 +50,11 @@ mkdir -p ~/.terraform.d/plugins/registry.terraform.io/DevFW-CICD/edge-connect/1. cp terraform-provider-edge-connect ~/.terraform.d/plugins/registry.terraform.io/DevFW-CICD/edge-connect/1.0.0/darwin_arm64/ ``` -Note: Adjust the path based on your OS and architecture (e.g., `linux_amd64`, `darwin_amd64`, etc.) +> Note: Adjust the path based on your OS and architecture (e.g., `linux_amd64`, `darwin_amd64`, etc.) -## Usage +4. Generate the binary by running `go install .` from the repository root. This installs the provider binary to `$HOME/go/bin` and means that `terraform init` is not necessary. -### Provider Configuration - -As the provider is currently not officially registered for public download, terraform must be configured to use a locally built version. - -To generate the binary run `go install .` from the repository root. This installs the provider binary to `$HOME/go/bin` and means that `terraform init` is not necessary. - -You will also need a `~/.terraformrc` file with the following contents. `` should refer to your `$HOME` directory. +5. You will also need a `~/.terraformrc` file with the following contents. `` should refer to your `$HOME` directory. ```hcl provider_installation { @@ -76,7 +70,11 @@ provider_installation { } ``` -You can then reference the local provider in your `.tf` files as follows: +## Usage + +### Provider Configuration + +The provider must be configured with credentials and a URL. This can be done with a token in your code: ```hcl provider "edge-connect" { @@ -85,7 +83,7 @@ provider "edge-connect" { } ``` -Or using basic authentication: +Or with basic authentication: ```hcl provider "edge-connect" { @@ -95,7 +93,7 @@ provider "edge-connect" { } ``` -Configuration can also be provided via environment variables: +Or without code changes, via environment variables: - `EDGE_CONNECT_BASE_URL` - `EDGE_CONNECT_TOKEN` - `EDGE_CONNECT_USERNAME` diff --git a/generate-provider-json.sh b/generate-provider-json.sh new file mode 100755 index 0000000..1cd1124 --- /dev/null +++ b/generate-provider-json.sh @@ -0,0 +1,51 @@ +#!/bin/bash +set -o errexit + +# This script generates and uploads a terraform provider.json file and uploads it to Terralist + +ARTIFACTS_FILE=$1 +METADATA_FILE=$2 + +TERRALIST_API=${TERRALIST_API:-https://terralist.garm-provider-test.t09.de/v1/api} +TERRALIST_API_KEY=${TERRALIST_API_KEY:-invalid-key} + +VERSION=$(cat $METADATA_FILE | jq -r '.version') + +BASE_URL="$GITHUB_SERVER_URL/$GITHUB_REPOSITORY/releases/download" + +if ! [[ "$BASE_URL" =~ "terraform" ]]; then + echo "Error: GITHUB_ environment variables not set correctly" >&2 + exit 1 +fi + +jq --arg base_url "$BASE_URL" --arg version "$VERSION" ' +{ + protocols: ["6"], + + shasums: ( + { + url: ($base_url + "/v" + $version + "/" + (.[] + | select(.type=="Checksum").name)), + signature_url: ($base_url + "/v" + $version + "/" + (.[] + | select(.type=="Signature").name)) + } + ), + + platforms: [ + .[] + | select(.type=="Archive") + | { + os: .goos, + arch: .goarch, + download_url: ($base_url + "/v" + $version + "/" + .name), + shasum: (.extra.Checksum | sub("^sha256:";"")) + } + ] +} +' $ARTIFACTS_FILE >./provider.json + +cat provider.json | jq . + +curl -X POST $TERRALIST_API/providers/edge-connect/${VERSION}/upload \ + -H "Authorization: Bearer x-api-key:$TERRALIST_API_KEY" \ + -d "$(cat ./provider.json)" \ No newline at end of file