diff --git a/.github/workflows/release .yml b/.github/workflows/release .yml new file mode 100644 index 00000000..3a63c0c2 --- /dev/null +++ b/.github/workflows/release .yml @@ -0,0 +1,26 @@ +name: release + +permissions: + contents: write + +"on": + push: + tags: + - v*.*.* + - '!v*.*.*-**' + +env: + OVH_ENDPOINT: "ovh-us" + OVH_APPLICATION_KEY: ${{ secrets.OVH_APPLICATION_KEY }} + OVH_APPLICATION_SECRET: ${{ secrets.OVH_APPLICATION_SECRET }} + OVH_CONSUMER_KEY: ${{ secrets.OVH_CONSUMER_KEY }} + +jobs: + main: + #uses: jaxxstorm/workflows/.github/workflows/main.yml@df55f0116159ea8d30f836557f05a3c699a37a63 + uses: ./.github/workflows/release-reusable.yml + secrets: inherit + with: + pulumi_test_owner: "lbrlabs" + provider_name: "ovh" + diff --git a/.github/workflows/release-reusable.yml b/.github/workflows/release-reusable.yml new file mode 100644 index 00000000..c22b818b --- /dev/null +++ b/.github/workflows/release-reusable.yml @@ -0,0 +1,361 @@ +on: + workflow_call: + inputs: + pulumi_test_owner: + required: true + type: string + provider_name: + required: true + type: string +env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} + NPM_TOKEN: ${{ secrets.NPM_TOKEN }} + NUGET_PUBLISH_KEY: ${{ secrets.NUGET_PUBLISH_KEY }} + PROVIDER: ${{ inputs.provider_name }} + PULUMI_ACCESS_TOKEN: ${{ secrets.PULUMI_ACCESS_TOKEN }} + PULUMI_API: https://api.pulumi.com + PULUMI_GO_DEP_ROOT: ${{ github.workspace }}/.. + PULUMI_LOCAL_NUGET: ${{ github.workspace }}/nuget + PULUMI_TEST_OWNER: ${{ inputs.pulumi_test_owner }} + PYPI_PASSWORD: ${{ secrets.PYPI_API_TOKEN }} + PYPI_USERNAME: "__token__" + TRAVIS_OS_NAME: linux + +jobs: + build_sdk: + name: build_sdk + needs: prerequisites + runs-on: ubuntu-latest + steps: + - name: Checkout Repo + uses: actions/checkout@v2 + - name: Checkout Scripts Repo + uses: actions/checkout@v2 + with: + path: ci-scripts + repository: jaxxstorm/scripts + ref: third_party + - name: Unshallow clone for tags + run: git fetch --prune --unshallow --tags + - name: Install Go + uses: actions/setup-go@v2 + with: + go-version: ${{matrix.goversion}} + - name: Install pulumictl + uses: jaxxstorm/action-install-gh-release@v1.2.0 + with: + repo: pulumi/pulumictl + - name: Install Pulumi CLI + uses: pulumi/action-install-pulumi-cli@v2 + - name: Setup Node + uses: actions/setup-node@v2 + with: + node-version: ${{matrix.nodeversion}} + registry-url: https://registry.npmjs.org + - name: Setup DotNet + uses: actions/setup-dotnet@v1 + with: + dotnet-version: ${{matrix.dotnetversion}} + - name: Setup Python + uses: actions/setup-python@v2 + with: + python-version: ${{matrix.pythonversion}} + - name: Download provider + tfgen binaries + uses: actions/download-artifact@v2 + with: + name: ${{ env.PROVIDER }}-provider.tar.gz + path: ${{ github.workspace }}/bin + - name: Untar provider binaries + run: |- + tar -zxf ${{ github.workspace }}/bin/provider.tar.gz -C ${{ github.workspace}}/bin + find ${{ github.workspace }} -name "pulumi-*-${{ env.PROVIDER }}" -print -exec chmod +x {} \; + - name: Install plugins + run: make install_plugins + - name: Update path + run: echo "${{ github.workspace }}/bin" >> $GITHUB_PATH + - name: Build SDK + run: make build_${{ matrix.language }} + - name: Check worktree clean + run: ./ci-scripts/ci/check-worktree-is-clean + - name: Compress SDK folder + run: tar -zcf sdk/${{ matrix.language }}.tar.gz -C sdk/${{ matrix.language }} . + - name: Upload artifacts + uses: actions/upload-artifact@v2 + with: + name: ${{ matrix.language }}-sdk.tar.gz + path: ${{ github.workspace}}/sdk/${{ matrix.language }}.tar.gz + strategy: + fail-fast: true + matrix: + dotnetversion: + - 3.1.301 + goversion: + - 1.19.x + language: + - nodejs + - python + - dotnet + - go + nodeversion: + - 14.x + pythonversion: + - "3.7" + prerequisites: + name: prerequisites + runs-on: ubuntu-latest + steps: + - name: Checkout Repo + uses: actions/checkout@v2 + - name: Checkout Scripts Repo + uses: actions/checkout@v2 + with: + path: ci-scripts + repository: jaxxstorm/scripts + ref: third_party + - name: Unshallow clone for tags + run: git fetch --prune --unshallow --tags + - name: Install Go + uses: actions/setup-go@v2 + with: + go-version: ${{matrix.goversion}} + - name: Install pulumictl + uses: jaxxstorm/action-install-gh-release@v1.2.0 + with: + repo: pulumi/pulumictl + - name: Install Pulumi CLI + uses: pulumi/action-install-pulumi-cli@v2 + - if: github.event_name == 'pull_request' + name: Install Schema Tools + uses: jaxxstorm/action-install-gh-release@v1.2.0 + with: + repo: mikhailshilkov/schema-tools + - name: Build tfgen & provider binaries + run: make provider + # - if: github.event_name == 'pull_request' + # name: Check Schema is Valid + # run: |- + # echo 'SCHEMA_CHANGES<> $GITHUB_ENV + # schema-tools compare ${{ env.PROVIDER }} master --local-path=provider/cmd/pulumi-resource-${{ env.PROVIDER }}/schema.json >> $GITHUB_ENV + # echo 'EOF' >> $GITHUB_ENV + # - if: github.event_name == 'pull_request' + # name: Comment on PR with Details of Schema Check + # uses: thollander/actions-comment-pull-request@1.0.1 + # with: + # GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + # message: | + # ### Does the PR have any schema changes? + + # ${{ env.SCHEMA_CHANGES }} + - name: Tar provider binaries + run: tar -zcf ${{ github.workspace }}/bin/provider.tar.gz -C ${{ github.workspace }}/bin/ pulumi-resource-${{ env.PROVIDER }} pulumi-tfgen-${{ env.PROVIDER }} + - name: Upload artifacts + uses: actions/upload-artifact@v2 + with: + name: ${{ env.PROVIDER }}-provider.tar.gz + path: ${{ github.workspace }}/bin/provider.tar.gz + strategy: + fail-fast: true + matrix: + dotnetversion: + - 3.1.301 + goversion: + - 1.19.x + nodeversion: + - 14.x + pythonversion: + - "3.7" + publish: + name: publish + needs: test + runs-on: ubuntu-latest + steps: + - name: Checkout Repo + uses: actions/checkout@v2 + - name: Unshallow clone for tags + run: git fetch --prune --unshallow --tags + - name: Install Go + uses: actions/setup-go@v2 + with: + go-version: ${{matrix.goversion}} + - name: Install pulumictl + uses: jaxxstorm/action-install-gh-release@v1.2.0 + with: + repo: pulumi/pulumictl + - name: Install Pulumi CLI + uses: pulumi/action-install-pulumi-cli@v2 + - name: Set Release Version + run: echo "GORELEASER_CURRENT_TAG=v$(pulumictl get version --language generic)" >> $GITHUB_ENV + - name: Run GoReleaser + uses: goreleaser/goreleaser-action@v2 + with: + args: release --rm-dist --timeout 60m0s + version: latest + strategy: + fail-fast: true + matrix: + dotnetversion: + - 3.1.301 + goversion: + - 1.19.x + nodeversion: + - 14.x + pythonversion: + - "3.7" + publish_sdk: + name: publish_sdk + needs: publish + runs-on: ubuntu-latest + steps: + - name: Checkout Repo + uses: actions/checkout@v2 + - name: Checkout Scripts Repo + uses: actions/checkout@v2 + with: + path: ci-scripts + repository: jaxxstorm/scripts + ref: third_party + - name: Unshallow clone for tags + run: git fetch --prune --unshallow --tags + - name: Install Go + uses: actions/setup-go@v2 + with: + go-version: ${{matrix.goversion}} + - name: Install pulumictl + uses: jaxxstorm/action-install-gh-release@v1.2.0 + with: + repo: pulumi/pulumictl + - name: Install Pulumi CLI + uses: pulumi/action-install-pulumi-cli@v2 + - name: Setup Node + uses: actions/setup-node@v2 + with: + node-version: ${{matrix.nodeversion}} + registry-url: https://registry.npmjs.org + - name: Setup DotNet + uses: actions/setup-dotnet@v1 + with: + dotnet-version: ${{matrix.dotnetversion}} + - name: Setup Python + uses: actions/setup-python@v2 + with: + python-version: ${{matrix.pythonversion}} + - name: Download python SDK + uses: actions/download-artifact@v2 + with: + name: python-sdk.tar.gz + path: ${{ github.workspace}}/sdk/ + - name: Uncompress python SDK + run: tar -zxf ${{github.workspace}}/sdk/python.tar.gz -C ${{github.workspace}}/sdk/python + - name: Download dotnet SDK + uses: actions/download-artifact@v2 + with: + name: dotnet-sdk.tar.gz + path: ${{ github.workspace}}/sdk/ + - name: Uncompress dotnet SDK + run: tar -zxf ${{github.workspace}}/sdk/dotnet.tar.gz -C ${{github.workspace}}/sdk/dotnet + - name: Download nodejs SDK + uses: actions/download-artifact@v2 + with: + name: nodejs-sdk.tar.gz + path: ${{ github.workspace}}/sdk/ + - name: Uncompress nodejs SDK + run: tar -zxf ${{github.workspace}}/sdk/nodejs.tar.gz -C ${{github.workspace}}/sdk/nodejs + - run: python -m pip install pip twine + - env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} + name: Publish SDKs + run: ./ci-scripts/ci/publish-tfgen-package ${{ github.workspace }} + strategy: + fail-fast: true + matrix: + dotnetversion: + - 3.1.301 + goversion: + - 1.19.x + nodeversion: + - 14.x + pythonversion: + - "3.7" + test: + name: test + needs: build_sdk + runs-on: ubuntu-latest + steps: + - name: Checkout Repo + uses: actions/checkout@v2 + - name: Checkout Scripts Repo + uses: actions/checkout@v2 + with: + path: ci-scripts + repository: jaxxstorm/scripts + ref: third_party + - name: Unshallow clone for tags + run: git fetch --prune --unshallow --tags + - name: Install Go + uses: actions/setup-go@v2 + with: + go-version: ${{matrix.goversion}} + - name: Install pulumictl + uses: jaxxstorm/action-install-gh-release@v1.2.0 + with: + repo: pulumi/pulumictl + - name: Install Pulumi CLI + uses: pulumi/action-install-pulumi-cli@v2 + - name: Setup Node + uses: actions/setup-node@v2 + with: + node-version: ${{matrix.nodeversion}} + registry-url: https://registry.npmjs.org + - name: Setup DotNet + uses: actions/setup-dotnet@v1 + with: + dotnet-version: ${{matrix.dotnetversion}} + - name: Setup Python + uses: actions/setup-python@v2 + with: + python-version: ${{matrix.pythonversion}} + - name: Download provider + tfgen binaries + uses: actions/download-artifact@v2 + with: + name: ${{ env.PROVIDER }}-provider.tar.gz + path: ${{ github.workspace }}/bin + - name: Untar provider binaries + run: |- + tar -zxf ${{ github.workspace }}/bin/provider.tar.gz -C ${{ github.workspace}}/bin + find ${{ github.workspace }} -name "pulumi-*-${{ env.PROVIDER }}" -print -exec chmod +x {} \; + - run: dotnet nuget add source ${{ github.workspace }}/nuget + - name: Download SDK + uses: actions/download-artifact@v2 + with: + name: ${{ matrix.language }}-sdk.tar.gz + path: ${{ github.workspace}}/sdk/ + - name: Uncompress SDK folder + run: tar -zxf ${{ github.workspace }}/sdk/${{ matrix.language }}.tar.gz -C ${{ + github.workspace }}/sdk/${{ matrix.language }} + - name: Update path + run: echo "${{ github.workspace }}/bin" >> $GITHUB_PATH + - name: Install Python deps + run: |- + pip3 install virtualenv==20.0.23 + pip3 install pipenv + - name: Install dependencies + run: make install_${{ matrix.language}}_sdk + - name: Run tests + run: cd examples && go test -v -count=1 -cover -timeout 2h -tags=${{ matrix.language}} -parallel 4 . + strategy: + fail-fast: true + matrix: + dotnetversion: + - 3.1.301 + goversion: + - 1.19.x + language: + - nodejs + - python + - dotnet + - go + nodeversion: + - 14.x + pythonversion: + - "3.7"