Add license to sagemaker-mlops and sagemaker-serve #259
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Sagemaker PR Checks (Master) | |
| on: | |
| pull_request_target: | |
| branches: | |
| - "master" | |
| paths: | |
| - 'sagemaker-train/**' | |
| - 'sagemaker-serve/**' | |
| - 'sagemaker-mlops/**' | |
| - 'sagemaker-core/**' | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.head_ref }} | |
| cancel-in-progress: true | |
| permissions: | |
| id-token: write | |
| jobs: | |
| collab-check: | |
| runs-on: ubuntu-latest | |
| outputs: | |
| approval-env: ${{ steps.collab-check.outputs.result }} | |
| steps: | |
| - name: Collaborator Check | |
| uses: actions/github-script@v7 | |
| id: collab-check | |
| with: | |
| github-token: ${{ secrets.COLLAB_CHECK_TOKEN }} | |
| result-encoding: string | |
| script: | | |
| try { | |
| const res = await github.rest.repos.checkCollaborator({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| username: "${{ github.event.pull_request.user.login }}", | |
| }); | |
| console.log("Verifed ${{ github.event.pull_request.user.login }} is a repo collaborator. Auto Approving PR Checks.") | |
| return res.status == "204" ? "auto-approve" : "manual-approval" | |
| } catch (error) { | |
| console.log("${{ github.event.pull_request.user.login }} is not a collaborator. Requiring Manual Approval to run PR Checks.") | |
| return "manual-approval" | |
| } | |
| wait-for-approval: | |
| runs-on: ubuntu-latest | |
| needs: [ collab-check ] | |
| environment: ${{ needs.collab-check.outputs.approval-env }} | |
| steps: | |
| - run: echo "Workflow Approved! Starting PR Checks." | |
| detect-changes: | |
| runs-on: ubuntu-latest | |
| needs: [wait-for-approval] | |
| outputs: | |
| submodules: ${{ steps.check-changes.outputs.submodules }} | |
| steps: | |
| - uses: actions/checkout@v3 | |
| with: | |
| fetch-depth: 0 | |
| token: ${{ secrets.GH_PAT }} | |
| ref: ${{ github.event.pull_request.base.ref }} | |
| - name: Detect Changes | |
| id: check-changes | |
| run: | | |
| set -e | |
| echo "Target Branch: ${{ github.event.pull_request.base.ref }}" | |
| echo "Current Target SHA: $(git rev-parse HEAD)" | |
| echo "PR Number: ${{ github.event.pull_request.number }}" | |
| echo "PR Latest SHA: ${{ github.event.pull_request.head.sha }}" | |
| git fetch origin pull/${{ github.event.pull_request.number }}/head | |
| CHANGES=$(git diff --name-only HEAD FETCH_HEAD) | |
| echo "Changed files:" | |
| echo "$CHANGES" | |
| # Function to extract dependencies from pyproject.toml | |
| get_dependencies() { | |
| local module=$1 | |
| grep "sagemaker-" "$module/pyproject.toml" | grep -o 'sagemaker-[a-z]*' | sort -u | |
| } | |
| # Function to find all modules that depend on a given module (recursively) | |
| find_dependents() { | |
| local target=$1 | |
| local all_modules=("sagemaker-core" "sagemaker-train" "sagemaker-serve" "sagemaker-mlops") | |
| local dependents=() | |
| for module in "${all_modules[@]}"; do | |
| if [ "$module" != "$target" ]; then | |
| if get_dependencies "$module" | grep -q "^$target$"; then | |
| dependents+=("$module") | |
| fi | |
| fi | |
| done | |
| echo "${dependents[@]}" | |
| } | |
| # Initialize set of submodules to test (using associative array) | |
| declare -A SUBMODULES_SET | |
| # Function to recursively add module and all its dependents | |
| add_module_and_dependents() { | |
| local module=$1 | |
| if [ -z "${SUBMODULES_SET[$module]}" ]; then | |
| SUBMODULES_SET["$module"]=1 | |
| echo "Adding $module to test set" | |
| # Find all modules that depend on this one and add them recursively | |
| local dependents=$(find_dependents "$module") | |
| for dependent in $dependents; do | |
| add_module_and_dependents "$dependent" | |
| done | |
| fi | |
| } | |
| # Check which submodules changed and add them plus their dependents | |
| if echo "$CHANGES" | grep -q "^sagemaker-core/"; then | |
| echo "sagemaker-core changed - will add core and all dependents" | |
| add_module_and_dependents "sagemaker-core" | |
| fi | |
| if echo "$CHANGES" | grep -q "^sagemaker-train/"; then | |
| echo "sagemaker-train changed - will add train and all dependents" | |
| add_module_and_dependents "sagemaker-train" | |
| fi | |
| if echo "$CHANGES" | grep -q "^sagemaker-serve/"; then | |
| echo "sagemaker-serve changed - will add serve and all dependents" | |
| add_module_and_dependents "sagemaker-serve" | |
| fi | |
| if echo "$CHANGES" | grep -q "^sagemaker-mlops/"; then | |
| echo "sagemaker-mlops changed - will add mlops" | |
| add_module_and_dependents "sagemaker-mlops" | |
| fi | |
| # Convert associative array to JSON array | |
| SUBMODULES='[]' | |
| for submodule in "${!SUBMODULES_SET[@]}"; do | |
| if [ "$SUBMODULES" = '[]' ]; then | |
| SUBMODULES="[\"$submodule\"]" | |
| else | |
| SUBMODULES=$(echo $SUBMODULES | sed "s/\]$/,\"$submodule\"\]/") | |
| fi | |
| done | |
| echo "Final SUBMODULES: $SUBMODULES" | |
| echo "submodules=$SUBMODULES" >> $GITHUB_OUTPUT | |
| codestyle-doc-tests: | |
| runs-on: ubuntu-latest | |
| needs: [detect-changes] | |
| if: needs.detect-changes.outputs.submodules != '[]' | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| submodule: ${{ fromJson(needs.detect-changes.outputs.submodules) }} | |
| steps: | |
| - name: Configure AWS Credentials | |
| uses: aws-actions/configure-aws-credentials@v4 | |
| with: | |
| role-to-assume: ${{ secrets.CI_AWS_ROLE_ARN }} | |
| aws-region: us-west-2 | |
| role-duration-seconds: 10800 | |
| - name: Run CodeBuild for ${{ matrix.submodule }} | |
| uses: aws-actions/aws-codebuild-run-build@v1 | |
| with: | |
| project-name: ${{ github.event.repository.name }}-ci-${{ matrix.submodule }}-codestyle-doc-tests | |
| source-version-override: 'refs/pull/${{ github.event.pull_request.number }}/head^{${{ github.event.pull_request.head.sha }}}' | |
| unit-tests: | |
| runs-on: ubuntu-latest | |
| needs: [detect-changes] | |
| if: needs.detect-changes.outputs.submodules != '[]' | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| submodule: ${{ fromJson(needs.detect-changes.outputs.submodules) }} | |
| steps: | |
| - name: Configure AWS Credentials | |
| uses: aws-actions/configure-aws-credentials@v4 | |
| with: | |
| role-to-assume: ${{ secrets.CI_AWS_ROLE_ARN }} | |
| aws-region: us-west-2 | |
| role-duration-seconds: 10800 | |
| - name: Run Unit Tests for ${{ matrix.submodule }} | |
| uses: aws-actions/aws-codebuild-run-build@v1 | |
| with: | |
| project-name: ${{ github.event.repository.name }}-ci-${{ matrix.submodule }}-unit-tests | |
| source-version-override: 'refs/pull/${{ github.event.pull_request.number }}/head^{${{ github.event.pull_request.head.sha }}}' | |
| integ-tests: | |
| runs-on: ubuntu-latest | |
| needs: [detect-changes] | |
| if: needs.detect-changes.outputs.submodules != '[]' | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| submodule: ${{ fromJson(needs.detect-changes.outputs.submodules) }} | |
| steps: | |
| - name: Configure AWS Credentials | |
| uses: aws-actions/configure-aws-credentials@v4 | |
| with: | |
| role-to-assume: ${{ secrets.CI_AWS_ROLE_ARN }} | |
| aws-region: us-west-2 | |
| role-duration-seconds: 10800 | |
| - name: Run Integ Tests for ${{ matrix.submodule }} | |
| uses: aws-actions/aws-codebuild-run-build@v1 | |
| with: | |
| project-name: ${{ github.event.repository.name }}-ci-${{ matrix.submodule }}-integ-tests | |
| source-version-override: 'refs/pull/${{ github.event.pull_request.number }}/head^{${{ github.event.pull_request.head.sha }}}' |