Build and test #2072
Workflow file for this run
This file contains hidden or 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
permissions: write-all # Equivalent to default permissions plus id-token: write | |
name: Build and test | |
on: | |
merge_group: null | |
pull_request: null | |
push: | |
branches: | |
- main | |
env: | |
AWS_REGION: us-west-2 | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
PULUMI_TEST_OWNER: "moolumi" | |
ESC_ACTION_OIDC_AUTH: true | |
ESC_ACTION_OIDC_ORGANIZATION: pulumi | |
ESC_ACTION_OIDC_REQUESTED_TOKEN_TYPE: urn:pulumi:token-type:access_token:organization | |
ESC_ACTION_ENVIRONMENT: github-secrets/pulumi-pulumi-dotnet | |
ESC_ACTION_EXPORT_ENVIRONMENT_VARIABLES: PULUMI_ACCESS_TOKEN=PULUMI_ACCESS_TOKEN_PRODUCTION | |
jobs: | |
setup_matrix: | |
runs-on: ubuntu-latest | |
outputs: | |
matrix: ${{ steps.set-matrix.outputs.matrix }} | |
steps: | |
- name: Fetch secrets from ESC | |
id: esc-secrets | |
uses: pulumi/esc-action@cf5b30703ffd5ad60cc3a880c09b3a9592b9372d # v1 | |
- id: set-matrix | |
run: | | |
os="${{ contains(github.event.pull_request.labels.*.name, 'ci/test') && 'ubuntu-latest macos-latest windows-latest' || 'ubuntu-latest' }}" | |
echo "matrix={\"os\": $(echo $os | jq -cR 'split(" ")')}" >> $GITHUB_OUTPUT | |
format: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Fetch secrets from ESC | |
id: esc-secrets | |
uses: pulumi/esc-action@cf5b30703ffd5ad60cc3a880c09b3a9592b9372d # v1 | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
with: | |
submodules: 'recursive' | |
- name: Setup dotnet SDK | |
uses: actions/setup-dotnet@v4 | |
- name: Setup dotnet SDK | |
uses: actions/setup-dotnet@v4 | |
with: | |
# Install 8.0 for Build.fsproj | |
dotnet-version: 8.0.x | |
- name: Format Pulumi SDK | |
run: dotnet run format-sdk verify | |
lint: | |
name: Lint Go | |
runs-on: ubuntu-22.04 | |
steps: | |
- name: Fetch secrets from ESC | |
id: esc-secrets | |
uses: pulumi/esc-action@cf5b30703ffd5ad60cc3a880c09b3a9592b9372d # v1 | |
- uses: actions/checkout@v4 | |
- name: Set up Go 1.24.x | |
uses: actions/setup-go@v5 | |
with: | |
go-version: 1.24.x | |
- name: Install golangci-lint | |
uses: golangci/golangci-lint-action@v8 | |
with: | |
version: ${{ env.GOLANGCI_LINT_VERSION }} | |
args: --help | |
- name: Run golangci-lint | |
# Print GitHub Actions-friendly output so that errors get marked | |
# in the pull request. | |
run: make lint GOLANGCI_LINT_ARGS=--output.text.path=stdout | |
lint-changelog: | |
name: Lint Changelog | |
runs-on: ubuntu-22.04 | |
steps: | |
- name: Fetch secrets from ESC | |
id: esc-secrets | |
uses: pulumi/esc-action@cf5b30703ffd5ad60cc3a880c09b3a9592b9372d # v1 | |
- uses: actions/checkout@v4 | |
- name: Check if folder is empty | |
id: folder_check | |
run: | | |
if [ -z "$(ls .changes/unreleased)" ]; then | |
echo "empty=true" >> $GITHUB_OUTPUT | |
else | |
echo "empty=false" >> $GITHUB_OUTPUT | |
fi | |
- name: Check the changelog is batchable | |
# There are changes so check changie will batch them | |
if: steps.folder_check.outputs.empty == 'false' | |
uses: miniscruff/changie-action@v2 | |
with: | |
args: batch auto --dry-run | |
build: | |
needs: setup_matrix | |
strategy: | |
matrix: | |
os: ${{ fromJson(needs.setup_matrix.outputs.matrix).os }} | |
dotnet-version: [8.0.x, 9.0.x] | |
runs-on: ${{ matrix.os }} | |
steps: | |
- name: Fetch secrets from ESC | |
id: esc-secrets | |
uses: pulumi/esc-action@cf5b30703ffd5ad60cc3a880c09b3a9592b9372d # v1 | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
- name: Setup dotnet SDK | |
id: setup-dotnet | |
uses: actions/setup-dotnet@v4 | |
with: | |
# Install 8.0 for Build.fsproj and the matrix version. | |
# `outputs.dotnet-version` is the latest version among the installed | |
# versions. Since Build.fsproj targets the lowest version we support, | |
# this works out ok for the matrix. | |
# https://github.com/actions/setup-dotnet?tab=readme-ov-file#dotnet-version | |
dotnet-version: | | |
8.0.x | |
${{ matrix.dotnet-version }} | |
- name: Create global.json | |
# This ensures that we use the matrix version instead of the runner's default version | |
# https://github.com/actions/setup-dotnet?tab=readme-ov-file#matrix-testing | |
run: | | |
echo '{"sdk":{"version": "${{ steps.setup-dotnet.outputs.dotnet-version }}"}}' > ./global.json | |
- name: Dotnet version | |
run: dotnet --version | |
- name: Install Pulumi CLI | |
uses: pulumi/actions@df5a93ad715135263c732ba288301bd044c383c0 # v6 | |
with: | |
pulumi-version: dev | |
- name: Build Pulumi SDK | |
run: dotnet run build-sdk | |
- name: Workspace clean (are xml doc file updates committed?) | |
uses: pulumi/git-status-check-action@v1 | |
with: | |
allowed-changes: ./global.json | |
- name: Test Pulumi SDK | |
run: dotnet run test-sdk coverage | |
- name: Test Pulumi Automation SDK | |
run: dotnet run test-automation-sdk coverage | |
- name: Upload coverage data | |
uses: codecov/codecov-action@v4 | |
with: | |
directory: coverage | |
files: "*" | |
fail_ci_if_error: false | |
verbose: true | |
token: ${{ steps.esc-secrets.outputs.CODECOV_TOKEN }} | |
integration-tests: | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [ubuntu-latest, windows-latest, macos-13] | |
dotnet-version: [8.0.x, 9.0.x] | |
runs-on: ${{ matrix.os }} | |
steps: | |
- name: Fetch secrets from ESC | |
id: esc-secrets | |
uses: pulumi/esc-action@cf5b30703ffd5ad60cc3a880c09b3a9592b9372d # v1 | |
- name: Set TARGET_FRAMEWORK | |
shell: bash | |
run: | | |
if [[ "${{ matrix.dotnet-version }}" == "8.0.x" ]]; then | |
echo "TARGET_FRAMEWORK=net8.0" >> $GITHUB_ENV | |
elif [[ "${{ matrix.dotnet-version }}" == "9.0.x" ]]; then | |
echo "TARGET_FRAMEWORK=net9.0" >> $GITHUB_ENV | |
else | |
echo "Unexpected dotnet-version: ${{ matrix.dotnet-version }}" | |
exit 1 | |
fi | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
- name: Setup dotnet SDK | |
id: setup-dotnet | |
uses: actions/setup-dotnet@v4 | |
with: | |
dotnet-version: ${{ matrix.dotnet-version }} | |
- name: Create global.json | |
# This ensures that we use the matrix version instead of the runner's default version | |
# https://github.com/actions/setup-dotnet?tab=readme-ov-file#matrix-testing | |
run: | | |
echo '{"sdk":{"version": "${{ steps.setup-dotnet.outputs.dotnet-version }}"}}' > ./global.json | |
- name: Dotnet version | |
run: dotnet --version | |
- name: Set up Go 1.24.x | |
uses: actions/setup-go@v5 | |
with: | |
go-version: 1.24.x | |
- name: Install Pulumi CLI | |
uses: pulumi/actions@df5a93ad715135263c732ba288301bd044c383c0 # v6 | |
with: | |
pulumi-version: dev | |
- name: Install gotestsum | |
uses: jaxxstorm/action-install-gh-release@v2.1.0 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
repo: gotestyourself/gotestsum | |
tag: v1.8.1 | |
cache: enable | |
- name: Install netcoredbg (Linux) | |
if: startsWith(matrix.os, 'ubuntu') | |
run: | | |
curl -sSL https://github.com/Samsung/netcoredbg/releases/download/3.1.1-1042/netcoredbg-linux-amd64.tar.gz -o netcoredbg.tar.gz | |
tar xzf netcoredbg.tar.gz | |
sudo cp netcoredbg/* /usr/bin/ | |
- uses: MinoruSekine/setup-scoop@v4.0.1 | |
if: startsWith(matrix.os, 'windows') | |
with: | |
buckets: extras | |
apps: doxygen plantuml | |
- name: Install netcoredbg (Windows) | |
if: startsWith(matrix.os, 'windows') | |
run: | | |
scoop install netcoredbg | |
- name: Install netcoredbg (MacOS) | |
if: startsWith(matrix.os, 'macos') | |
id: netcoredbg | |
run: | | |
curl -sSL https://github.com/Samsung/netcoredbg/releases/download/3.1.1-1042/netcoredbg-osx-amd64.tar.gz -o netcoredbg.tar.gz | |
tar xzf netcoredbg.tar.gz | |
echo "netcoredbgpath=$(pwd)/netcoredbg/" >> ${GITHUB_OUTPUT} | |
- name: Integration tests | |
if: startsWith(matrix.os, 'macos') | |
run: PATH="${{ steps.netcoredbg.outputs.netcoredbgpath}}":"$PATH" make test_integration | |
- name: Integration tests | |
if: startsWith(matrix.os, 'macos') != true | |
run: make test_integration | |
conformance-tests: | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [ubuntu-latest, macos-13] | |
dotnet-version: [8.0.x] | |
runs-on: ${{ matrix.os }} | |
steps: | |
- name: Fetch secrets from ESC | |
id: esc-secrets | |
uses: pulumi/esc-action@cf5b30703ffd5ad60cc3a880c09b3a9592b9372d # v1 | |
- name: Set TARGET_FRAMEWORK | |
shell: bash | |
run: | | |
if [[ "${{ matrix.dotnet-version }}" == "8.0.x" ]]; then | |
echo "TARGET_FRAMEWORK=net8.0" >> $GITHUB_ENV | |
elif [[ "${{ matrix.dotnet-version }}" == "9.0.x" ]]; then | |
echo "TARGET_FRAMEWORK=net9.0" >> $GITHUB_ENV | |
else | |
echo "Unexpected dotnet-version: ${{ matrix.dotnet-version }}" | |
exit 1 | |
fi | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
- name: Setup dotnet SDK | |
id: setup-dotnet | |
uses: actions/setup-dotnet@v4 | |
with: | |
dotnet-version: ${{ matrix.dotnet-version }} | |
- name: Create global.json | |
# This ensures that we use the matrix version instead of the runner's default version | |
# https://github.com/actions/setup-dotnet?tab=readme-ov-file#matrix-testing | |
run: | | |
echo '{"sdk":{"version": "${{ steps.setup-dotnet.outputs.dotnet-version }}"}}' > ./global.json | |
- name: Dotnet version | |
run: dotnet --version | |
- name: Set up Go 1.24.x | |
uses: actions/setup-go@v5 | |
with: | |
go-version: 1.24.x | |
- name: Install Pulumi CLI | |
uses: pulumi/actions@df5a93ad715135263c732ba288301bd044c383c0 # v6 | |
with: | |
pulumi-version: dev | |
- name: Install gotestsum | |
uses: jaxxstorm/action-install-gh-release@v2.1.0 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
repo: gotestyourself/gotestsum | |
tag: v1.8.1 | |
cache: enable | |
- name: Conformance tests | |
run: make test_conformance | |
info: | |
name: gather | |
runs-on: ubuntu-latest | |
outputs: | |
version: "${{ steps.version.outputs.version }}" | |
steps: | |
- name: Fetch secrets from ESC | |
id: esc-secrets | |
uses: pulumi/esc-action@cf5b30703ffd5ad60cc3a880c09b3a9592b9372d # v1 | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Get the latest version | |
id: latest | |
uses: miniscruff/changie-action@v2 | |
with: | |
args: next auto | |
continue-on-error: true | |
- name: Get the next patch version | |
id: patch | |
uses: miniscruff/changie-action@v2 | |
with: | |
args: next patch | |
- name: Stitch version together | |
id: version | |
run: | | |
TAG="${{ steps.latest.outputs.output || steps.patch.outputs.output }}" | |
TAG="${TAG#v}" # remove prefix | |
OID="$(git rev-parse --short HEAD)" | |
PULUMI_VERSION="$TAG-alpha.$OID" | |
echo "version=${PULUMI_VERSION}" >> $GITHUB_OUTPUT | |
release-dev-sdk: | |
name: release-dev-sdk | |
needs: [build, integration-tests, info] | |
uses: ./.github/workflows/release-sdk.yml | |
if: ${{ github.event_name == 'merge_group' }} | |
with: | |
ref: ${{ github.event.release.tag_name }} | |
version: ${{ needs.info.outputs.version }} | |
release-notes: ${{ github.event.release.body }} | |
secrets: inherit | |
check-pr: | |
needs: ["build", "integration-tests", "format"] | |
runs-on: ubuntu-latest | |
if: always() # always report a status | |
steps: | |
- name: Fetch secrets from ESC | |
id: esc-secrets | |
uses: pulumi/esc-action@cf5b30703ffd5ad60cc3a880c09b3a9592b9372d # v1 | |
- name: Build failed | |
if: ${{ needs.build.result != 'success' }} | |
run: exit 1 | |
- name: Integration tests failed | |
if: ${{ needs.integration-tests.result != 'success' }} | |
run: exit 1 | |
- name: Format failed | |
if: ${{ needs.format.result != 'success' }} | |
run: exit 1 | |
- name: CI succeeded | |
run: exit 0 |