Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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?

like image 617
dingus Avatar asked Oct 25 '25 18:10

dingus


2 Answers

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
like image 67
Martí Jordà Roca Avatar answered Oct 29 '25 06:10

Martí Jordà Roca


In your buildspec file you can perform shell commands, I think you can use some git commands there and echo the result, so you can see them as logs during the build.

like image 26
Hossein Heydari Avatar answered Oct 29 '25 07:10

Hossein Heydari