Search code examples
amazon-web-servicesgithubaws-codebuild

How can an AWS CodeBuild job see which files have changed?


I'm trying to set up an AWS CodeBuild project to run tests to validate PRs and commits on a GitHub repository.

Because of the nature of the repo (a monorepo combining several ML models):

  • I need to restrict down to only run tests associated with files changed in the PR/commit to keep time+cost under control, but
  • The tests will typically require reference to other un-changed files in the repo: So can't just only pull changed files through to the build container.

How can a running CodeBuild build triggered by a GitHub PR (as per the docs here) 'see' which files are changed by the PR to selectively execute tests?


Solution

  • You can use git diff --name-only $$CODEBUILD_RESOLVED_SOURCE_VERSION $$CODEBUILD_WEBHOOK_PREV_COMMIT

    Where $CODEBUILD_WEBHOOK_PREV_COMMIT is the commit id of the previous commit. And $CODEBUILD_RESOLVED_SOURCE_VERSION is the commit id of the actual one.

    Inside a build phase you can check the change with:

    - |
        if [ "$(git diff --name-only $CODEBUILD_RESOLVED_SOURCE_VERSION $CODEBUILD_WEBHOOK_PREV_COMMIT | grep -e <filde_path>)" != "" ]; then
          #your code;
        fi