| name: CI |
| |
| on: |
| push: |
| branches-ignore: |
| - 'main' |
| - 'docs' |
| |
| env: |
| BUILDER_VERSION: v0.9.54 |
| BUILDER_SOURCE: releases |
| BUILDER_HOST: https://d19elf31gohf1l.cloudfront.net |
| PACKAGE_NAME: aws-crt-java |
| LINUX_BASE_IMAGE: ubuntu-18-x64 |
| RUN: ${{ github.run_id }}-${{ github.run_number }} |
| AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} |
| AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} |
| AWS_DEFAULT_REGION: ${{ secrets.AWS_DEFAULT_REGION }} |
| AWS_REGION: us-east-1 |
| AWS_DEVICE_FARM_REGION: us-west-2 # Device Farm only available in us-west-2 region |
| |
| jobs: |
| linux-compat: |
| runs-on: ubuntu-22.04 # latest |
| strategy: |
| matrix: |
| image: |
| - manylinux2014-x64 |
| - manylinux2014-x86 |
| - al2-x64 |
| - fedora-34-x64 |
| - opensuse-leap |
| - rhel8-x64 |
| #- manylinux2014-x86 until we find 32-bit linux binaries we can use |
| steps: |
| - name: Checkout Sources |
| uses: actions/checkout@v3 |
| with: |
| submodules: true |
| - name: Build ${{ env.PACKAGE_NAME }} |
| run: | |
| aws s3 cp s3://aws-crt-test-stuff/ci/${{ env.BUILDER_VERSION }}/linux-container-ci.sh ./linux-container-ci.sh && chmod a+x ./linux-container-ci.sh |
| ./linux-container-ci.sh ${{ env.BUILDER_VERSION }} aws-crt-${{ matrix.image }} build -p ${{ env.PACKAGE_NAME }} |
| |
| linux-compiler-compat: |
| runs-on: ubuntu-22.04 # latest |
| strategy: |
| matrix: |
| compiler: |
| - clang-3 |
| - clang-6 |
| - clang-8 |
| - clang-9 |
| - clang-10 |
| - clang-11 |
| - gcc-4.8 |
| - gcc-5 |
| - gcc-6 |
| - gcc-7 |
| - gcc-8 |
| steps: |
| - name: Checkout Sources |
| uses: actions/checkout@v3 |
| with: |
| submodules: true |
| - name: Build ${{ env.PACKAGE_NAME }} |
| run: | |
| aws s3 cp s3://aws-crt-test-stuff/ci/${{ env.BUILDER_VERSION }}/linux-container-ci.sh ./linux-container-ci.sh && chmod a+x ./linux-container-ci.sh |
| ./linux-container-ci.sh ${{ env.BUILDER_VERSION }} aws-crt-${{ env.LINUX_BASE_IMAGE }} build -p ${{ env.PACKAGE_NAME }} --compiler=${{ matrix.compiler }} |
| |
| linux-arm: |
| name: ARM (${{ matrix.arch }}) |
| runs-on: ubuntu-22.04 # latest |
| strategy: |
| matrix: |
| arch: [armv6, armv7, arm64] |
| steps: |
| - name: Build ${{ env.PACKAGE_NAME }} |
| run: | |
| python3 -c "from urllib.request import urlretrieve; urlretrieve('${{ env.BUILDER_HOST }}/${{ env.BUILDER_SOURCE }}/${{ env.BUILDER_VERSION }}/builder.pyz?run=${{ env.RUN }}', 'builder')" |
| chmod a+x builder |
| ./builder build -p ${{ env.PACKAGE_NAME }} --target=linux-${{ matrix.arch }} --spec=downstream |
| |
| linux-musl: |
| runs-on: ubuntu-22.04 # latest |
| strategy: |
| matrix: |
| image: |
| - alpine-3.16-x64 |
| - alpine-3.16-arm64 |
| - openwrt-x64-openjdk8 |
| steps: |
| - name: Install qemu/docker |
| run: docker run --rm --privileged multiarch/qemu-user-static --reset -p yes |
| - name: Checkout Sources |
| uses: actions/checkout@v2 |
| with: |
| submodules: true |
| - name: Build ${{ env.PACKAGE_NAME }} |
| run: | |
| aws s3 cp s3://aws-crt-test-stuff/ci/${{ env.BUILDER_VERSION }}/linux-container-ci.sh ./linux-container-ci.sh && chmod a+x ./linux-container-ci.sh |
| ./linux-container-ci.sh ${{ env.BUILDER_VERSION }} aws-crt-${{ matrix.image }} build -p ${{ env.PACKAGE_NAME }} |
| |
| # armv7 needs its own action due to inability to differentiate at runtime armv6 vs armv7 in the jvm: |
| # |
| # At build time we can properly figure out that we're targeting armv7. |
| # At run time we have to force armv7 (via environment variable) in order to achieve proper resource path |
| # resolution. |
| linux-musl-armv7: |
| runs-on: ubuntu-20.04 # latest |
| steps: |
| - name: Install qemu/docker |
| run: docker run --rm --privileged multiarch/qemu-user-static --reset -p yes |
| - name: Checkout Sources |
| uses: actions/checkout@v2 |
| with: |
| submodules: true |
| - name: Build ${{ env.PACKAGE_NAME }} |
| run: | |
| export AWS_CRT_ARCH=armv7 |
| aws s3 cp s3://aws-crt-test-stuff/ci/${{ env.BUILDER_VERSION }}/linux-container-ci.sh ./linux-container-ci.sh && chmod a+x ./linux-container-ci.sh |
| ./linux-container-ci.sh ${{ env.BUILDER_VERSION }} aws-crt-alpine-3.16-armv7 build -p ${{ env.PACKAGE_NAME }} |
| |
| raspberry: |
| runs-on: ubuntu-22.04 # latest |
| strategy: |
| fail-fast: false |
| matrix: |
| image: |
| - raspbian-bullseye |
| steps: |
| # set arm arch |
| - name: Install qemu/docker |
| run: docker run --rm --privileged multiarch/qemu-user-static --reset -p yes |
| - name: Build ${{ env.PACKAGE_NAME }} |
| run: | |
| aws s3 cp s3://aws-crt-test-stuff/ci/${{ env.BUILDER_VERSION }}/linux-container-ci.sh ./linux-container-ci.sh && chmod a+x ./linux-container-ci.sh |
| ./linux-container-ci.sh ${{ env.BUILDER_VERSION }} aws-crt-${{ matrix.image }} build -p ${{ env.PACKAGE_NAME }} |
| |
| |
| windows: |
| runs-on: windows-2022 # latest |
| steps: |
| - name: Checkout Sources |
| uses: actions/checkout@v3 |
| with: |
| submodules: true |
| - name: Build ${{ env.PACKAGE_NAME }} + consumers |
| run: | |
| python -c "from urllib.request import urlretrieve; urlretrieve('${{ env.BUILDER_HOST }}/${{ env.BUILDER_SOURCE }}/${{ env.BUILDER_VERSION }}/builder.pyz?run=${{ env.RUN }}', 'builder.pyz')" |
| python builder.pyz build -p ${{ env.PACKAGE_NAME }} --spec=downstream |
| |
| windows-vc14: |
| runs-on: windows-2019 # windows-2019 is last env with Visual Studio 2015 (v14.0) |
| strategy: |
| matrix: |
| arch: [x86, x64] |
| steps: |
| - name: Checkout Sources |
| uses: actions/checkout@v3 |
| with: |
| submodules: true |
| - name: Build ${{ env.PACKAGE_NAME }} + consumers |
| env: |
| AWS_CMAKE_TOOLSET: v140 |
| run: | |
| python -c "from urllib.request import urlretrieve; urlretrieve('${{ env.BUILDER_HOST }}/${{ env.BUILDER_SOURCE }}/${{ env.BUILDER_VERSION }}/builder.pyz?run=${{ env.RUN }}', 'builder.pyz')" |
| python builder.pyz build -p ${{ env.PACKAGE_NAME }} downstream |
| |
| osx: # With integration tests |
| runs-on: macos-13 # latest |
| steps: |
| - name: Checkout Sources |
| uses: actions/checkout@v3 |
| with: |
| submodules: true |
| - name: Build ${{ env.PACKAGE_NAME }} + consumers |
| run: | |
| python3 -c "from urllib.request import urlretrieve; urlretrieve('${{ env.BUILDER_HOST }}/${{ env.BUILDER_SOURCE }}/${{ env.BUILDER_VERSION }}/builder.pyz?run=${{ env.RUN }}', 'builder')" |
| chmod a+x builder |
| ./builder build -p ${{ env.PACKAGE_NAME }} --spec=downstream |
| |
| osx-arm64: |
| runs-on: macos-13 # latest |
| steps: |
| - name: Checkout Sources |
| uses: actions/checkout@v3 |
| with: |
| submodules: true |
| - name: Build ${{ env.PACKAGE_NAME }} + consumers |
| run: | |
| mvn -B compile -P mac-arm64 |
| - name: verify backward compatibility |
| run: | |
| python3 codebuild/macos_compatibility_check.py armv8 |
| |
| osx-x64: |
| runs-on: macos-13 |
| steps: |
| - name: Checkout Sources |
| uses: actions/checkout@v2 |
| with: |
| submodules: true |
| - name: Build ${{ env.PACKAGE_NAME }} + consumers |
| run: | |
| mvn -B compile -P mac-x64 |
| - name: verify backward compatibility |
| run: | |
| python3 codebuild/macos_compatibility_check.py |
| |
| android: |
| # ubuntu-20.04 comes with Android tooling, see: |
| # https://github.com/actions/virtual-environments/blob/main/images/linux/Ubuntu2004-README.md#android |
| name: Android |
| runs-on: ubuntu-20.04 # latest |
| steps: |
| - name: Checkout Sources |
| uses: actions/checkout@v2 |
| with: |
| submodules: true |
| # Setup JDK 11 |
| - name: set up JDK 11 |
| uses: actions/setup-java@v3 |
| with: |
| java-version: '11' |
| distribution: 'temurin' |
| cache: 'gradle' |
| # Build and publish locally for the test app to find the SNAPSHOT version |
| - name: Build ${{ env.PACKAGE_NAME }} |
| run: | |
| ./gradlew :android:crt:build |
| ./gradlew -PnewVersion="1.0.0-SNAPSHOT" :android:crt:publishToMavenLocal |
| # Setup files required by test app for Device Farm testing |
| - name: Setup Android Test Files |
| run: | |
| cd src/test/android/testapp/src/main/assets |
| python3 -m pip install boto3 |
| python3 ./android_file_creation.py |
| - name: Build Test App |
| run: | |
| cd src/test/android/testapp |
| ../../../../gradlew assembledebug |
| ../../../../gradlew assembleAndroidTest |
| - name: Device Farm Tests |
| run: | |
| echo "Running Device Farm Python Script" |
| python3 ./.github/workflows/run_android_ci.py \ |
| --run_id ${{ github.run_id }} \ |
| --run_attempt ${{ github.run_attempt }} \ |
| --project_arn $(aws secretsmanager get-secret-value --region us-east-1 --secret-id "ci/DeviceFarm/ProjectArn" --query "SecretString" | cut -f5 -d\" | cut -f1 -d'\') \ |
| --device_pool_arn $(aws secretsmanager get-secret-value --region us-east-1 --secret-id "ci/DeviceFarm/DevicePoolArn" --query "SecretString" | cut -f5 -d\" | cut -f1 -d'\') |
| |
| # check that docs can still build |
| check-docs: |
| runs-on: ubuntu-22.04 # latest |
| steps: |
| - uses: actions/checkout@v3 |
| with: |
| submodules: true |
| - name: Check docs |
| run: | |
| ./make-docs.sh |
| |
| check-submodules: |
| runs-on: ubuntu-22.04 # latest |
| steps: |
| - name: Checkout Source |
| uses: actions/checkout@v3 |
| with: |
| submodules: true |
| fetch-depth: 0 |
| - name: Check Submodules |
| # note: using "@main" because "@${{env.BUILDER_VERSION}}" doesn't work |
| # https://github.com/actions/runner/issues/480 |
| uses: awslabs/aws-crt-builder/.github/actions/check-submodules@main |
| |
| |
| localhost-test-linux: |
| runs-on: ubuntu-22.04 # latest |
| steps: |
| - name: Checkout |
| uses: actions/checkout@v3 |
| with: |
| submodules: true |
| - name: Configure local host |
| run: | |
| python3 -m pip install h2 |
| cd crt/aws-c-http/tests/py_localhost/ |
| python3 server.py & |
| python3 non_tls_server.py & |
| - name: Build and test |
| run: | |
| python3 -c "from urllib.request import urlretrieve; urlretrieve('${{ env.BUILDER_HOST }}/${{ env.BUILDER_SOURCE }}/${{ env.BUILDER_VERSION }}/builder.pyz?run=${{ env.RUN }}', 'builder.pyz')" |
| python builder.pyz localhost-test -p ${{ env.PACKAGE_NAME }} --spec=downstream |
| |
| localhost-test-mac: |
| runs-on: macos-13 # latest |
| steps: |
| - name: Checkout |
| uses: actions/checkout@v3 |
| with: |
| submodules: true |
| - name: Configure local host |
| run: | |
| python3 -m pip install h2 |
| cd crt/aws-c-http/tests/py_localhost/ |
| python3 server.py & |
| python3 non_tls_server.py & |
| - name: Build and test |
| run: | |
| python3 -c "from urllib.request import urlretrieve; urlretrieve('${{ env.BUILDER_HOST }}/${{ env.BUILDER_SOURCE }}/${{ env.BUILDER_VERSION }}/builder.pyz?run=${{ env.RUN }}', 'builder')" |
| chmod a+x builder |
| ./builder localhost-test -p ${{ env.PACKAGE_NAME }} --spec=downstream |
| |
| localhost-test-win: |
| runs-on: windows-2022 # latest |
| steps: |
| - name: Checkout |
| uses: actions/checkout@v3 |
| with: |
| submodules: true |
| - name: Configure local host |
| run: | |
| python -m pip install h2 |
| - name: Build and test |
| run: | |
| cd crt/aws-c-http/tests/py_localhost/ |
| Start-Process -NoNewWindow python .\server.py |
| Start-Process -NoNewWindow python .\non_tls_server.py |
| python -c "from urllib.request import urlretrieve; urlretrieve('${{ env.BUILDER_HOST }}/${{ env.BUILDER_SOURCE }}/${{ env.BUILDER_VERSION }}/builder.pyz?run=${{ env.RUN }}', 'builder.pyz')" |
| python builder.pyz localhost-test -p ${{ env.PACKAGE_NAME }} downstream |