Skip to content

Commit

Permalink
ci: add deprecate workflow (#846)
Browse files Browse the repository at this point in the history
  • Loading branch information
dpilch authored May 20, 2024
1 parent 0ffe64f commit 72e714d
Show file tree
Hide file tree
Showing 17 changed files with 536 additions and 4 deletions.
8 changes: 8 additions & 0 deletions .codebuild/deprecate.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
version: 0.2
env:
shell: bash
git-credential-helper: yes
phases:
build:
commands:
- source ./shared-scripts.sh && _deprecate
14 changes: 14 additions & 0 deletions .codebuild/deprecate_workflow.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
version: 0.2
env:
shell: bash
compute-type: BUILD_GENERAL1_SMALL

batch:
fast-fail: false
build-graph:
- identifier: install_linux
buildspec: .codebuild/install_linux.yml
- identifier: deprecate
buildspec: .codebuild/deprecate.yml
depend-on:
- install_linux
10 changes: 10 additions & 0 deletions .codebuild/install_linux.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
version: 0.2
env:
shell: bash
phases:
build:
commands:
- source ./shared-scripts.sh && _installLinux
artifacts:
files:
- 'shared-scripts.sh'
2 changes: 1 addition & 1 deletion .codebuild/scripts/local_publish_helpers.sh
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#!/bin/bash

custom_registry_url=http://localhost:4873
default_verdaccio_package=verdaccio@4.5.1
[email protected].2

function startLocalRegistry {
# Start local registry
Expand Down
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -29,3 +29,6 @@ package-lock.json
.idea
scripts/.env
.codebuild/debug_workflow.yml
.npmrc
verdaccio-logs.txt
scripts/components/private_packages.ts
3 changes: 2 additions & 1 deletion .prettierignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,5 @@
**/package-lock.json
**/.eslintrc.js
**/tsconfig.json
packages/*/CHANGELOG.md
packages/*/CHANGELOG.md
scripts/components/private_packages.ts
8 changes: 6 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@
"lint-fix": "eslint . --ext .js,.jsx,.ts,.tsx --fix",
"clean": "lerna run clean && lerna exec yarn rimraf tsconfig.tsbuildinfo && lerna clean --yes && yarn rimraf node_modules",
"build": "lerna run build",
"production-build": "yarn --ignore-engines --frozen-lockfile && lerna run build --concurrency 3 --stream",
"production-install": "yarn --ignore-engines --frozen-lockfile",
"production-build": "yarn production-install && lerna run build --concurrency 3 --stream",
"publish:main": "lerna publish --canary --exact --force-publish --preid=dev --dist-tag=dev --include-merged-tags --conventional-prerelease --no-verify-access --yes",
"publish:release": "lerna publish --exact --conventional-commits --message 'chore(release): Publish [ci skip]' --no-verify-access --yes",
"publish:tag": "lerna publish --exact --dist-tag=$NPM_TAG --preid=$NPM_TAG --conventional-commits --conventional-prerelease --message 'chore(release): Publish tagged release $NPM_TAG [ci skip]' --no-verify-access --yes",
Expand All @@ -35,6 +36,7 @@
"verify-api-extract": "yarn extract-api && ./scripts/verify-extract-api.sh",
"trigger-release": "source ./scripts/cloud-release.sh && triggerRelease",
"trigger-tag-release": "source ./scripts/cloud-release.sh && triggerTagRelease",
"trigger-deprecate-release": "source ./scripts/cloud-release.sh && deprecateRelease",
"view-test-artifact": "./scripts/view-test-artifacts.sh",
"cleanup-stale-resources": "source ./scripts/cloud-utils.sh && cleanupStaleResources",
"cloud-e2e": "source scripts/cloud-utils.sh && cloudE2E",
Expand All @@ -44,7 +46,9 @@
"cloud-e2e-debug": "source scripts/cloud-utils.sh && cloudE2EDebug",
"authenticate-e2e-profile": "source scripts/cloud-utils.sh && authenticateWithE2EProfile",
"extract-dependency-licenses": "./scripts/extract-dependency-licenses.sh",
"verify-dependency-licenses-extract": "yarn extract-dependency-licenses && ./scripts/verify-dependency-licenses.sh"
"verify-dependency-licenses-extract": "yarn extract-dependency-licenses && ./scripts/verify-dependency-licenses.sh",
"deprecate": "ts-node scripts/deprecate_release.ts",
"postinstall": "./scripts/postinstall.sh"
},
"bugs": {
"url": "https://github.com/aws-amplify/amplify-codegen/issues"
Expand Down
11 changes: 11 additions & 0 deletions scripts/cloud-release.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ source ./scripts/cloud-utils.sh
export RELEASE_ROLE_NAME=CodebuildDeveloper
export RELEASE_PROFILE_NAME=AmplifyAPIPluginRelease
export RELEASE_PROJECT_NAME=amplify-codegen-release-workflow
export DEPRECATE_PROJECT_NAME=amplify-codegen-deprecate-workflow

function triggerRelease {
triggerProjectBatch $RELEASE_ACCOUNT_PROD $RELEASE_ROLE_NAME "${RELEASE_PROFILE_NAME}Prod" $RELEASE_PROJECT_NAME "release"
Expand All @@ -20,3 +21,13 @@ function triggerTagRelease {
fi
triggerProjectBatch $RELEASE_ACCOUNT_PROD $RELEASE_ROLE_NAME "${RELEASE_PROFILE_NAME}Prod" $RELEASE_PROJECT_NAME $branch_name
}

function deprecateRelease {
DEPRECATION_MESSAGE=$1
SEARCH_FOR_RELEASE_STARTING_FROM=$2
USE_NPM_REGISTRY=$3
triggerProjectBatchWithEnvOverrides $RELEASE_ACCOUNT_PROD $RELEASE_ROLE_NAME "${RELEASE_PROFILE_NAME}Prod" $DEPRECATE_PROJECT_NAME "release" \
name=DEPRECATION_MESSAGE,value=\""$DEPRECATION_MESSAGE"\",type=PLAINTEXT \
name=SEARCH_FOR_RELEASE_STARTING_FROM,value=$SEARCH_FOR_RELEASE_STARTING_FROM,type=PLAINTEXT \
name=USE_NPM_REGISTRY,value=$USE_NPM_REGISTRY,type=PLAINTEXT
}
17 changes: 17 additions & 0 deletions scripts/cloud-utils.sh
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,23 @@ function triggerProjectBatch {
echo "https://$REGION.console.aws.amazon.com/codesuite/codebuild/$account_number/projects/$project_name/batch/$RESULT?region=$REGION"
}

function triggerProjectBatchWithEnvOverrides {
account_number=$1
role_name=$2
profile_name=$3
project_name=$4
target_branch=$5
shift 5
authenticate $account_number $role_name $profile_name
echo AWS Account: $account_number
echo Project: $project_name
echo Target Branch: $target_branch
RESULT=$(aws codebuild start-build-batch --region=$REGION --profile="${profile_name}" --project-name $project_name --source-version=$target_branch \
--environment-variables-override name=BRANCH_NAME,value=$target_branch,type=PLAINTEXT "$@" \
--query 'buildBatch.id' --output text)
echo "https://$REGION.console.aws.amazon.com/codesuite/codebuild/$account_number/projects/$project_name/batch/$RESULT?region=$REGION"
}

function triggerProject {
account_number=$1
role_name=$2
Expand Down
59 changes: 59 additions & 0 deletions scripts/components/dist_tag_mover.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
import { EOL } from 'os';
import { NpmClient } from './npm_client.js';
import { releaseTagToNameAndVersion } from './release_tag_to_name_and_version';

type DistTagMoveAction = {
/**
* An NPM dist-tag
*/
distTag: string;
/**
* This is a string of the form <packageName>@<version>
*/
releaseTag: string;
};

/**
* Handles moving npm dist-tags from one package version to another
*/
export class DistTagMover {
/**
* Initialize with an npmClient
*/
constructor(private readonly npmClient: NpmClient) {}

/**
* Given a list of sourceReleaseTags and destReleaseTags,
* any npm dist-tags that are pointing to a sourceReleaseTag will be moved to point to the corresponding destReleaseTag
*/
moveDistTags = async (sourceReleaseTags: string[], destReleaseTags: string[]) => {
const moveActions: DistTagMoveAction[] = [];

for (const sourceReleaseTag of sourceReleaseTags) {
const { packageName, version: sourceVersion } = releaseTagToNameAndVersion(sourceReleaseTag);

const { 'dist-tags': distTags } = await this.npmClient.getPackageInfo(sourceReleaseTag);

Object.entries(distTags).forEach(([tagName, versionAtTag]) => {
if (versionAtTag !== sourceVersion) {
return;
}
const destReleaseTag = destReleaseTags.find(releaseTag => releaseTag.includes(packageName));
if (!destReleaseTag) {
console.warn(`No corresponding destination release tag found for ${sourceReleaseTag}. latest tag not moved.`);
} else {
moveActions.push({
releaseTag: destReleaseTag,
distTag: tagName,
});
}
});
}

for (const { distTag, releaseTag } of moveActions) {
console.log(`Moving dist tag "${distTag}" to release tag ${releaseTag}`);
await this.npmClient.setDistTag(releaseTag, distTag);
console.log(`Done!${EOL}`);
}
};
}
Loading

0 comments on commit 72e714d

Please sign in to comment.