Hugo
Hugo

Reputation: 1672

How to get CodeBuild project name from buildspec file

This is my buildspec file to build an Angular, React, Vue or similar project through AWS CodeCommit and publish the resulting artifact to an S3 bucket:

version: 0.2
env:
  variables:
    S3_BUCKET: "my-bucket"
phases:
  install:
    runtime-versions:
      nodejs: 16
  pre_build:
    commands:
      - echo Installing source NPM dependencies...
      - npm install
  build:
    commands:
      - echo Build started on `date`
      - npm run build
  post_build:
    commands:
      - aws s3 cp dist s3://${S3_BUCKET} --recursive
      - echo Build completed on `date`

What I would like to do is to use a subfolder with the name of the project when publishing the result files in the bucket. Now all files go to my-bucket but I would like them to go to my-bucket/name-of-the-project

I could change the post-build command to something like

    - aws s3 cp dist s3://${S3_BUCKET}/name-of-the-project --recursive

That way it would be always the same directory name. What I want is to get dynamically the name of the CodeBuild project or from the package.json or similar to make that directory match the project name.

Upvotes: 0

Views: 846

Answers (1)

fedonev
fedonev

Reputation: 25649

Here are two ways to read a project identifier from the build context at run-time:

Option 1: Read the project name from package.json:

PROJECT_NAME=$(cat package.json | jq -r '.name')
echo $PROJECT_NAME # -> name-of-the-project

Option 2: Extract the CodeCommit repo name from the source URL. Each CodeBuild execution exposes several environment variables, including CODEBUILD_SOURCE_REPO_URL.

echo $CODEBUILD_SOURCE_REPO_URL # -> https://git-codecommit.us-east-1.amazonaws.com/v1/repos/my-repo

REPO_NAME=$(echo $CODEBUILD_SOURCE_REPO_URL | awk -F\"/\" '{print $NF}') # split the url at '/', return the last item
echo $REPO_NAME # -> my-repo

Pass one of the captured names to the S3 command:

aws s3 cp dist s3://${S3_BUCKET}/${PROJECT_NAME} --recursive

Upvotes: 1

Related Questions