Split `ci.yml` to avoid max workflow depth error (#1316)

This commit is contained in:
John DiSanti 2022-04-13 10:50:18 -07:00 committed by GitHub
parent d16ee113ad
commit 3a8b9f054e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 170 additions and 59 deletions

View File

@ -1,3 +1,6 @@
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0.
# This workflow differs from PR CI in that it uploads a Docker build image to public ECR.
# This should be done only on push to main so that PRs from forks can successfully run CI
# since GitHub secrets cannot be shared with a PR from a fork.
@ -9,7 +12,7 @@ on:
# Allow only one Docker build image build to run at a time for the entire smithy-rs repo
concurrency:
group: ci-docker-build-yml
group: ci-main-yml
cancel-in-progress: true
env:
@ -47,7 +50,7 @@ jobs:
docker push "${{ env.ecr_repository }}:${IMAGE_TAG}"
docker push "${{ env.ecr_repository }}:main"
# Run normal CI, which should pick up the updated build image
# Run the shared CI after a Docker build image has been uploaded to ECR
ci:
needs: rebuild-docker-build-image
uses: ./.github/workflows/ci.yml

51
.github/workflows/ci-pr.yml vendored Normal file
View File

@ -0,0 +1,51 @@
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0.
# This workflow runs CI and the PR Bot on pull requests.
name: CI
on:
pull_request:
# Allow one instance of this workflow per pull request, and cancel older runs when new changes are pushed
concurrency:
group: ci-yaml-${{ github.ref }}
cancel-in-progress: true
jobs:
# This job detects if the PR made changes to build tools. If it did, then it builds a new
# build Docker image. Otherwise, it downloads a build image from Public ECR. In both cases,
# it uploads the image as a build artifact for other jobs to download and use.
acquire-base-image:
name: Acquire Base Image
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
path: smithy-rs
fetch-depth: 0
- name: Acquire base image
id: acquire
run: ./smithy-rs/tools/ci-build/acquire-build-image
- name: Upload base image
uses: actions/upload-artifact@v3
with:
name: smithy-rs-base-image
path: smithy-rs-base-image
retention-days: 1
# Run shared CI after the Docker build image has either been rebuilt or found in ECR
ci:
needs: acquire-base-image
uses: ./.github/workflows/ci.yml
# The PR bot requires a Docker build image, so make it depend on the `acquire-base-image` job.
pr_bot:
name: PR Bot
needs: acquire-base-image
# Only run this job on pull requests (not directly on main)
if: ${{ github.head_ref }}
uses: ./.github/workflows/pull-request-bot.yml
secrets:
SMITHY_RS_PULL_REQUEST_CDN_S3_BUCKET_NAME: ${{ secrets.SMITHY_RS_PULL_REQUEST_CDN_S3_BUCKET_NAME }}
SMITHY_RS_PULL_REQUEST_CDN_ROLE_ARN: ${{ secrets.SMITHY_RS_PULL_REQUEST_CDN_ROLE_ARN }}

View File

@ -1,57 +1,22 @@
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0.
# This is the shared CI workflow that is run by both `ci-pr.yml` and `ci-main.yml` depending
# on if a pull request is being checked, or if the `main` branch is being checked after merge.
name: Test
on:
workflow_call:
workflow_dispatch:
pull_request:
name: CI
# Allow one instance of this workflow per pull request, and cancel older runs when new changes are pushed
concurrency:
group: ci-yaml-${{ github.ref }}
cancel-in-progress: true
env:
rust_version: 1.56.1
rust_toolchain_components: clippy,rustfmt
jobs:
# This job detects if the PR made changes to build tools. If it did, then it builds a new
# build Docker image. Otherwise, it downloads a build image from Public ECR. In both cases,
# it uploads the image as a build artifact for other jobs to download and use.
acquire-base-image:
name: Acquire Base Image
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
path: smithy-rs
fetch-depth: 0
- name: Acquire base image
id: acquire
run: ./smithy-rs/tools/ci-build/acquire-build-image
- name: Upload base image
uses: actions/upload-artifact@v3
with:
name: smithy-rs-base-image
path: smithy-rs-base-image
retention-days: 1
# The PR bot requires a Docker build image, so make it depend on the `acquire-base-image` job.
pr_bot:
name: PR Bot
needs: acquire-base-image
# Only run this job on pull requests (not directly on main)
if: ${{ github.head_ref }}
uses: ./.github/workflows/pull-request-bot.yml
secrets:
SMITHY_RS_PULL_REQUEST_CDN_S3_BUCKET_NAME: ${{ secrets.SMITHY_RS_PULL_REQUEST_CDN_S3_BUCKET_NAME }}
SMITHY_RS_PULL_REQUEST_CDN_ROLE_ARN: ${{ secrets.SMITHY_RS_PULL_REQUEST_CDN_ROLE_ARN }}
# The `generate` job runs scripts that produce artifacts that are required by the `test` job,
# and also runs some checks/lints so that those are run sooner rather than later.
generate:
name: Generate
needs: acquire-base-image
runs-on: ubuntu-latest
# To avoid repeating setup boilerplate, we have the actual commands
# in a matrix strategy. These commands get run in the steps after all the setup.
@ -80,8 +45,6 @@ jobs:
# code to have already been generated in order to run.
test-codegen:
name: Test Codegen
needs:
- acquire-base-image
runs-on: ubuntu-latest
# To avoid repeating setup boilerplate, we have the actual test commands
# in a matrix strategy. These commands get run in the steps after all the setup.
@ -110,9 +73,7 @@ jobs:
# to be checked since `aws-config` depends on the generated STS client.
test-runtimes-tools-and-sdk:
name: Test Rust Runtimes, Tools, and SDK
needs:
- acquire-base-image
- generate
needs: generate
runs-on: ubuntu-latest
# To avoid repeating setup boilerplate, we have the actual test commands
# in a matrix strategy. These commands get run in the steps after all the setup.
@ -168,9 +129,7 @@ jobs:
# This job is split out from the rest since it is not required to pass for merge
check-sdk-examples:
name: Check SDK Examples
needs:
- acquire-base-image
- generate
needs: generate
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3

8
ci
View File

@ -1,4 +1,9 @@
#!/bin/bash
#
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0.
#
set -e
if [[ $# -lt 1 ]]; then
@ -13,5 +18,4 @@ if [[ $# -lt 1 ]]; then
fi
cd ..
./smithy-rs/tools/ci-build/acquire-build-image
./smithy-rs/tools/ci-build/ci-action "$@"
make -f ./smithy-rs/ci.mk "$@"

88
ci.mk Normal file
View File

@ -0,0 +1,88 @@
#
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0.
#
# This is a makefile executed by the `./ci` script that
# has a target for every single CI script in `tools/ci-build/scripts`,
# with dependencies between targets included so that it's not necessary
# to remember to generate a SDK for the targets that require one.
CI_BUILD=./smithy-rs/tools/ci-build
CI_ACTION=$(CI_BUILD)/ci-action
.PHONY: acquire-build-image
acquire-build-image:
$(CI_BUILD)/acquire-build-image
.PHONY: check-aws-sdk-examples
check-aws-sdk-examples: generate-aws-sdk
$(CI_ACTION) $@
.PHONY: check-aws-sdk-services
check-aws-sdk-services: generate-aws-sdk
$(CI_ACTION) $@
.PHONY: check-aws-sdk-smoketest-additional-checks
check-aws-sdk-smoketest-additional-checks: generate-aws-sdk-smoketest
$(CI_ACTION) $@
.PHONY: check-aws-sdk-smoketest-docs-clippy-udeps
check-aws-sdk-smoketest-docs-clippy-udeps: generate-aws-sdk-smoketest
$(CI_ACTION) $@
.PHONY: check-aws-sdk-smoketest-unit-tests
check-aws-sdk-smoketest-unit-tests: generate-aws-sdk-smoketest
$(CI_ACTION) $@
.PHONY: check-client-codegen-integration-tests
check-client-codegen-integration-tests:
$(CI_ACTION) $@
.PHONY: check-client-codegen-unit-tests
check-client-codegen-unit-tests:
$(CI_ACTION) $@
.PHONY: check-rust-runtimes-and-tools
check-rust-runtimes-and-tools: generate-aws-sdk-smoketest
$(CI_ACTION) $@
.PHONY: check-sdk-codegen-unit-tests
check-sdk-codegen-unit-tests:
$(CI_ACTION) $@
.PHONY: check-server-codegen-integration-tests
check-server-codegen-integration-tests:
$(CI_ACTION) $@
.PHONY: check-server-codegen-unit-tests
check-server-codegen-unit-tests:
$(CI_ACTION) $@
.PHONY: check-server-e2e-test
check-server-e2e-test:
$(CI_ACTION) $@
.PHONY: check-style-and-lints
check-style-and-lints:
$(CI_ACTION) $@
.PHONY: generate-aws-sdk-smoketest
generate-aws-sdk-smoketest:
$(CI_ACTION) $@
.PHONY: generate-aws-sdk
generate-aws-sdk:
$(CI_ACTION) $@
.PHONY: generate-codegen-diff
generate-codegen-diff:
$(CI_ACTION) $@
.PHONY: generate-smithy-rs-runtime-bundle
generate-smithy-rs-runtime-bundle:
$(CI_ACTION) $@
.PHONY: sanity-test
sanity-test:
$(CI_ACTION) $@

View File

@ -27,12 +27,18 @@ mkdir -p "${ACTION_PATH}/workspace/artifacts"
cp -r "${SCRIPT_PATH}/scripts" "${ACTION_PATH}/workspace/"
# Copy inputs into workspace
for input_path in \
"${START_PATH}/aws-doc-sdk-examples" \
"${START_PATH}/aws-sdk" \
"${START_PATH}/aws-sdk-smoketest" \
"${START_PATH}/smithy-rs";
for input_name in \
"aws-doc-sdk-examples" \
"aws-sdk" \
"aws-sdk-smoketest" \
"smithy-rs";
do
input_path="${START_PATH}/${input_name}"
if [[ ! -d "${input_path}" ]]; then
# In local dev, the artifacts aren't extracted into the workspace path, but rather,
# remain in the `artifacts/` path. So look there too.
input_path="${START_PATH}/artifacts/${input_name}"
fi
if [[ -d "${input_path}" ]]; then
if [[ -d "${input_path}/.git" ]]; then
# Copy the inputs across while excluding .gitignore'd files