From 33d1c3922a6930c997946344753c56ebe3b6f8f1 Mon Sep 17 00:00:00 2001 From: 0marperez Date: Wed, 24 Apr 2024 13:16:28 -0400 Subject: [PATCH] Re-add other CI --- .github/workflows/api-compat-verification.yml | 32 +++++ .github/workflows/changelog-verification.yml | 24 ++++ .github/workflows/continous-integration.yml | 132 ++++++++++++++++++ .github/workflows/dependabot.yml | 17 +++ 4 files changed, 205 insertions(+) create mode 100644 .github/workflows/api-compat-verification.yml create mode 100644 .github/workflows/changelog-verification.yml create mode 100644 .github/workflows/continous-integration.yml create mode 100644 .github/workflows/dependabot.yml diff --git a/.github/workflows/api-compat-verification.yml b/.github/workflows/api-compat-verification.yml new file mode 100644 index 000000000..e9b816678 --- /dev/null +++ b/.github/workflows/api-compat-verification.yml @@ -0,0 +1,32 @@ +name: API compatibility verification + +on: + pull_request: + types: [ opened, synchronize, reopened, labeled, unlabeled ] + branches: [ main ] + +jobs: + api-compat-verification: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Check for API compatibility + if: ${{ !contains(github.event.pull_request.labels.*.name, 'acknowledge-api-break') }} + run: | + git fetch origin ${{ github.base_ref }} --depth 1 && \ + git diff remotes/origin/${{ github.base_ref }} --numstat "*.api" | awk ' + BEGIN { s = 0 } + + # git diff numstat shows lines deleted in field 2, hence sum up field 2 across all items + { s += $2 } + + # exit with the number of lines deleted as the result code so that `if failure()` works below + END { exit s } + ' + - name: Error message + if: ${{ failure() }} + run: | + echo "::error ::This change modifies the public API in a way that may be backwards-incompatible. Carefully review this pull request and either:" + echo "::error ::* Revert the changes which caused the API incompatibility –or–" + echo "::error ::* Add the 'acknowledge-api-break' label to this PR (in rare cases warranting an API breakage)" + exit 1 \ No newline at end of file diff --git a/.github/workflows/changelog-verification.yml b/.github/workflows/changelog-verification.yml new file mode 100644 index 000000000..2de1239a1 --- /dev/null +++ b/.github/workflows/changelog-verification.yml @@ -0,0 +1,24 @@ +name: Changelog verification + +on: + pull_request: + types: [ opened, synchronize, reopened, labeled, unlabeled ] + branches: [ main ] + +jobs: + changelog-verification: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Check for changelog entry + if: ${{ !contains(github.event.pull_request.labels.*.name, 'no-changelog') }} + run: | + git fetch origin ${{ github.base_ref }} --depth 1 && \ + git diff remotes/origin/${{ github.base_ref }} --name-only | grep -P "\.changes/[0-9a-f-]+\.json" + - name: Error message + if: ${{ failure() }} + run: | + echo "::error ::No new/updated changelog entry found in /.changes directory. Please either:" + echo "::error ::* Add a changelog entry (see CONTRIBUTING.md for instructions) –or–" + echo "::error ::* Add the 'no-changelog' label to this PR (in rare cases not warranting a changelog entry)" + exit 1 \ No newline at end of file diff --git a/.github/workflows/continous-integration.yml b/.github/workflows/continous-integration.yml new file mode 100644 index 000000000..47674e4c1 --- /dev/null +++ b/.github/workflows/continous-integration.yml @@ -0,0 +1,132 @@ +name: CI + +on: + push: + branches: [ main ] + pull_request: + workflow_dispatch: + +# Allow one instance of this workflow per pull request, and cancel older runs when new changes are pushed +concurrency: + group: ci-pr-${{ github.ref }} + cancel-in-progress: true + +env: + RUN: ${{ github.run_id }}-${{ github.run_number }} + GRADLE_OPTS: "-Dorg.gradle.daemon=false -Dkotlin.incremental=false" + +jobs: + jvm: + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + # we build with a specific JDK version but source/target compatibility should ensure the jar is usable by + # the target versions we want to support + java-version: + - 8 + - 11 + - 17 + - 21 + steps: + - name: Checkout sources + uses: actions/checkout@v4 + - name: Configure JDK + uses: actions/setup-java@v3 + with: + distribution: 'corretto' + java-version: 17 + cache: 'gradle' + - name: Test + shell: bash + run: | + ./gradlew -Ptest.java.version=${{ matrix.java-version }} jvmTest --stacktrace + all-platforms: + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: [ ubuntu-latest, macos-latest, windows-latest ] + steps: + - name: Checkout sources + uses: actions/checkout@v4 + - name: Configure JDK + uses: actions/setup-java@v3 + with: + distribution: 'corretto' + java-version: 17 + cache: 'gradle' + - name: Test + shell: bash + run: | + echo "kotlinWarningsAsErrors=true" >> $GITHUB_WORKSPACE/local.properties + ./gradlew apiCheck + ./gradlew test jvmTest + - name: Save Test Reports + if: failure() + uses: actions/upload-artifact@v3 + with: + name: test-reports-${{ matrix.os }} + path: '**/build/reports' + + protocol-tests: + runs-on: ubuntu-latest + steps: + - name: Checkout sources + uses: actions/checkout@v4 + - name: Configure JDK + uses: actions/setup-java@v3 + with: + distribution: 'corretto' + java-version: 17 + cache: 'gradle' + - name: Test + shell: bash + run: | + ./gradlew publishToMavenLocal + ./gradlew testAllProtocols + downstream: + runs-on: ubuntu-latest + steps: + - name: Checkout sources + uses: actions/checkout@v4 + with: + path: 'smithy-kotlin' + - name: Checkout tools + uses: actions/checkout@v4 + with: + path: 'aws-kotlin-repo-tools' + repository: 'awslabs/aws-kotlin-repo-tools' + ref: '0.2.3' + sparse-checkout: | + .github + - name: Checkout aws-sdk-kotlin + uses: ./aws-kotlin-repo-tools/.github/actions/checkout-head + with: + # smithy-kotlin is checked out as a sibling dir which will automatically make it an included build + path: 'aws-sdk-kotlin' + repository: 'awslabs/aws-sdk-kotlin' + - name: Configure JDK + uses: actions/setup-java@v3 + with: + distribution: 'corretto' + java-version: 17 + cache: 'gradle' + - name: Build and Test aws-sdk-kotlin downstream + run: | + # TODO - JVM only + cd $GITHUB_WORKSPACE/smithy-kotlin + ./gradlew --parallel publishToMavenLocal + SMITHY_KOTLIN_RUNTIME_VERSION=$(grep sdkVersion= gradle.properties | cut -d = -f 2) + SMITHY_KOTLIN_CODEGEN_VERSION=$(grep codegenVersion= gradle.properties | cut -d = -f 2) + cd $GITHUB_WORKSPACE/aws-sdk-kotlin + # replace smithy-kotlin-runtime-version and smithy-kotlin-codegen-version to be + # whatever we are testing such that the protocol test projects don't fail with a + # version that doesn't exist locally or in maven central. Otherwise the generated + # protocol test projects will use whatever the SDK thinks the version of + # smithy-kotlin should be + sed -i "s/smithy-kotlin-runtime-version = .*$/smithy-kotlin-runtime-version = \"$SMITHY_KOTLIN_RUNTIME_VERSION\"/" gradle/libs.versions.toml + sed -i "s/smithy-kotlin-codegen-version = .*$/smithy-kotlin-codegen-version = \"$SMITHY_KOTLIN_CODEGEN_VERSION\"/" gradle/libs.versions.toml + ./gradlew --parallel publishToMavenLocal + ./gradlew test jvmTest + ./gradlew testAllProtocols diff --git a/.github/workflows/dependabot.yml b/.github/workflows/dependabot.yml new file mode 100644 index 000000000..49dd480f2 --- /dev/null +++ b/.github/workflows/dependabot.yml @@ -0,0 +1,17 @@ +name: Dependabot Dependency Submission + +on: + push: + branches: [ main ] + +permissions: + contents: write + +jobs: + dependency-submission: + runs-on: ubuntu-latest + steps: + - name: Checkout sources + uses: actions/checkout@v4 + - name: Generate and submit dependency graph + uses: gradle/actions/dependency-submission@v3 \ No newline at end of file