Skip to content

Commit 76ae89a

Browse files
authored
Fix running semver-checks on aws-config (#3272)
## Motivation and Context Fixes #3265 ## Description To check semver, `semver checks` needs to compile two versions of a crate, i.e. baseline and current. Our CI failed to compile `aws-config` for a baseline version. The following diagram shows what was missing to cause compilation failure: ``` ┌───────────┐ │ smithy-rs │ └─────┬─────┘ │ │ │ ┌────────┐ └─────┤ target │ └───┬────┘ │ ┌───────────────┐ └────────┤ semver_checks │ └───────┬───────┘ │ │ │ ┌──────────┐ └───────┤ git-base │ └────┬─────┘ │ │ ┌──────────────┐ ├────────┤ <rev number> │ │ └──────┬───────┘ │ │ │ │ │ │ ┌───────┐ │ ├───────┤ aws │ │ │ └───┬───┘ │ │ │ │ │ │ ┌──────────────┐ │ │ ├───────┤ rust-runtime │ │ │ │ └──────┬───────┘ │ │ │ │ │ │ │ │ ┌────────────┐ │ │ │ └───────┤ aws-config │ ◄*************** │ │ │ └────────────┘ * │ │ │ * * │ │ │ * * │ │ │ *****depends*on**** * │ │ │ ▼ * │ │ │ * │ │ │ ┌─────┐ * │ │ └───────┤ sdk │ (with no "build" directory) * │ │ └─────┘ * │ │ * │ │ * │ │ ┌────────────────────┐ depends on │ └──────┤ tmp-codegen-diff │ * │ └─────────┬──────────┘ * │ │ * │ │ ┌─────────┐ * │ └───────┤ aws-sdk │ * │ └────┬────┘ * │ │ ┌─────┐ * │ └─────┤ sdk │ * │ └─────┘ * │ * │ * │ ┌───────────────────────────────────────┐ * └───────────┤ local-aws_config-0_0_0_smithy_rs_head │***************************** └───────────────────────────────────────┘ ``` `local-aws_config-0_0_0_smithy_rs_head` under the `git-base` directory is a special crate created by `semver-checks` for a baseline version of `aws-config` and its `Cargo.toml` depends on `target/semver_checks/git-base/<rev number>/aws/rust-runtime/aws-config`. However, that `aws-config` in turn depends upon crates in `target/semver_checks/git-base/<rev number>/aws/sdk/build/` (as shown [here](https://github.com/smithy-lang/smithy-rs/blob/main/aws/rust-runtime/aws-config/Cargo.toml#L23-L33)), which does not exist in a baseline branch. When `semver-checks.py` [creates a baseline branch](https://github.com/smithy-lang/smithy-rs/blob/3d0cb5c3b179d5ed1d14531882657b481c4469f0/tools/ci-scripts/codegen-diff/semver-checks.py#L31) to prepare for running `cargo semver-checks`, it [moves aws/sdk/build to tmp-codegen-diff](https://github.com/smithy-lang/smithy-rs/blob/3d0cb5c3b179d5ed1d14531882657b481c4469f0/tools/ci-scripts/codegen-diff/diff_lib.py#L59), leaving nothing behind in `aws/sdk/build/`. The fix, therefore, is to `cp -r aws/sdk/build/aws-sdk` instead of `mv aws/sdk/build/aws-sdk` when preparing a baseline branch. The issue is specific to `aws-config`, probably because that's the only runtime crate that depends on those in `aws/sdk/build`. ## Testing Verified a clean run for `cargo semver-checks` in [an investigation branch](https://github.com/smithy-lang/smithy-rs/actions/runs/7035082815/job/19144676499#step:4:1101). ---- _By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice._
1 parent edab8cf commit 76ae89a

File tree

2 files changed

+12
-7
lines changed

2 files changed

+12
-7
lines changed

tools/ci-scripts/codegen-diff/diff_lib.py

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,18 +26,18 @@ def running_in_docker_build():
2626
return os.environ.get("SMITHY_RS_DOCKER_BUILD_IMAGE") == "1"
2727

2828

29-
def checkout_commit_and_generate(revision_sha, branch_name, targets=None):
29+
def checkout_commit_and_generate(revision_sha, branch_name, targets=None, preserve_aws_sdk_build=False):
3030
if running_in_docker_build():
3131
eprint(f"Fetching base revision {revision_sha} from GitHub...")
3232
run(f"git fetch --no-tags --progress --no-recurse-submodules --depth=1 origin {revision_sha}")
3333

3434
# Generate code for HEAD
3535
eprint(f"Creating temporary branch {branch_name} with generated code for {revision_sha}")
3636
run(f"git checkout {revision_sha} -B {branch_name}")
37-
generate_and_commit_generated_code(revision_sha, targets)
37+
generate_and_commit_generated_code(revision_sha, targets, preserve_aws_sdk_build)
3838

3939

40-
def generate_and_commit_generated_code(revision_sha, targets=None):
40+
def generate_and_commit_generated_code(revision_sha, targets=None, preserve_aws_sdk_build=False):
4141
targets = targets or [
4242
target_codegen_client,
4343
target_codegen_server,
@@ -56,7 +56,11 @@ def generate_and_commit_generated_code(revision_sha, targets=None):
5656
get_cmd_output(f"rm -rf {OUTPUT_PATH}")
5757
get_cmd_output(f"mkdir {OUTPUT_PATH}")
5858
if target_aws_sdk in targets:
59-
get_cmd_output(f"mv aws/sdk/build/aws-sdk {OUTPUT_PATH}/")
59+
# Compiling aws-config for semver checks baseline requires build artifacts to exist under aws/sdk/build
60+
if preserve_aws_sdk_build:
61+
get_cmd_output(f"cp -r aws/sdk/build/aws-sdk {OUTPUT_PATH}/")
62+
else:
63+
get_cmd_output(f"mv aws/sdk/build/aws-sdk {OUTPUT_PATH}/")
6064
for target in [target_codegen_client, target_codegen_server]:
6165
if target in targets:
6266
get_cmd_output(f"mv {target}/build/smithyprojections/{target} {OUTPUT_PATH}/")
@@ -89,6 +93,9 @@ def generate_and_commit_generated_code(revision_sha, targets=None):
8993
f"xargs rm -f", shell=True)
9094

9195
get_cmd_output(f"git add -f {OUTPUT_PATH}")
96+
if preserve_aws_sdk_build:
97+
get_cmd_output(f"git add -f aws/sdk/build")
98+
9299
get_cmd_output(f"git -c 'user.name=GitHub Action (generated code preview)' "
93100
f"-c 'user.name={COMMIT_AUTHOR_NAME}' "
94101
f"-c 'user.email={COMMIT_AUTHOR_EMAIL}' "

tools/ci-scripts/codegen-diff/semver-checks.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,16 +28,14 @@ def main(skip_generation=False):
2828

2929
if not skip_generation:
3030
checkout_commit_and_generate(head_commit_sha, CURRENT_BRANCH, targets=['aws:sdk'])
31-
checkout_commit_and_generate(base_commit_sha, BASE_BRANCH, targets=['aws:sdk'])
31+
checkout_commit_and_generate(base_commit_sha, BASE_BRANCH, targets=['aws:sdk'], preserve_aws_sdk_build=True)
3232
get_cmd_output(f'git checkout {CURRENT_BRANCH}')
3333
sdk_directory = os.path.join(OUTPUT_PATH, 'aws-sdk', 'sdk')
3434
os.chdir(sdk_directory)
3535

3636
failures = []
3737
deny_list = [
3838
# add crate names here to exclude them from the semver checks
39-
# TODO(https://github.com/smithy-lang/smithy-rs/issues/3265)
40-
'aws-config'
4139
]
4240
for path in list(os.listdir())[:10]:
4341
eprint(f'checking {path}...', end='')

0 commit comments

Comments
 (0)