123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167 |
- name: Build (ya make)
- description: Build targets
- inputs:
- build_target:
- required: false
- description: "build target"
- build_preset:
- required: true
- default: "relwithdebinfo"
- description: "debug, relwithdebinfo, release-asan, release-tsan, release, release-cmake14"
- put_build_results_to_cache:
- required: false
- default: "true"
- bazel_remote_uri:
- required: false
- description: "bazel-remote endpoint"
- bazel_remote_username:
- required: false
- description: "bazel-remote username"
- bazel_remote_password:
- required: false
- description: "bazel-remote password"
- link_threads:
- required: false
- default: "8"
- description: "link threads count"
- additional_ya_make_args:
- type: string
- default: ""
- outputs:
- success:
- value: ${{ steps.build.outputs.status }}
- description: "build success"
- log_url:
- value: ${{ steps.init.outputs.log_url }}
- description: "build log url"
- runs:
- using: "composite"
- steps:
- - name: Init
- id: init
- shell: bash
- env:
- build_preset: ${{ inputs.build_preset }}
- run: |
- export TMP_DIR=$(pwd)/tmp_build
- echo "TMP_DIR=$TMP_DIR" >> $GITHUB_ENV
-
- export log_url="$S3_URL_PREFIX/build_logs/ya_make.log"
-
- rm -rf $TMP_DIR && mkdir $TMP_DIR
-
- echo "BUILD_PRESET=$build_preset" >> $GITHUB_ENV
- echo "GITHUB_TOKEN=${{ github.token }}" >> $GITHUB_ENV
- echo "LOG_URL=$log_url" >> $GITHUB_ENV
- echo "log_url=$log_url" >> $GITHUB_OUTPUT
- - name: build
- id: build
- shell: bash
- run: |
- set -x
- extra_params=()
- if [ ! -z "${{ inputs.build_target }}" ]; then
- extra_params+=(--target="${{ inputs.build_target }}")
- fi
- if [ ! -z "${{ inputs.bazel_remote_uri }}" ]; then
- extra_params+=(--bazel-remote-store)
- extra_params+=(--bazel-remote-base-uri "${{ inputs.bazel_remote_uri }}")
- fi
-
- if [ "${{ inputs.put_build_results_to_cache }}" = "true" ]; then
- extra_params+=(--bazel-remote-username "${{ inputs.bazel_remote_username }}")
- extra_params+=(--bazel-remote-password "${{ inputs.bazel_remote_password }}")
- extra_params+=(--bazel-remote-put --dist-cache-evict-bins --add-result .o --add-result .a)
- fi
-
- case "${{ inputs.build_preset }}" in
- debug)
- build_type=debug
- ;;
- relwithdebinfo)
- build_type=relwithdebinfo
- ;;
- release)
- build_type=release
- ;;
- release-clang14)
- build_type=release
- extra_params+=(--target-platform="CLANG14-LINUX-X86_64")
- extra_params+=(-DLLD_VERSION=16)
- ;;
- release-asan)
- build_type=release
- extra_params+=(--sanitize="address")
- extra_params+=(-DSKIP_JUNK -DUSE_EAT_MY_DATA -DDEBUGINFO_LINES_ONLY)
- ;;
- release-tsan)
- build_type=release
- extra_params+=(--sanitize="thread")
- extra_params+=(-DSKIP_JUNK -DUSE_EAT_MY_DATA -DDEBUGINFO_LINES_ONLY)
- ;;
- release-msan)
- build_type=release
- extra_params+=(--sanitize="memory")
- extra_params+=(-DSKIP_JUNK -DUSE_EAT_MY_DATA -DDEBUGINFO_LINES_ONLY)
- ;;
- *)
- echo "Invalid preset: ${{ inputs.build_preset }}"
- exit 1
- ;;
- esac
-
- if [ ! -z "${{ inputs.additional_ya_make_args }}" ]; then
- extra_params+=(${{ inputs.additional_ya_make_args }})
- fi
- echo "::debug::get version"
- ./ya --version
-
- echo "Build **{platform_name}-${BUILD_PRESET}** is running..." | .github/scripts/tests/comment-pr.py
-
- # to be sure
- set -o pipefail
-
- ./ya make -k --build "${build_type}" --force-build-depends -T --stat -DCONSISTENT_DEBUG \
- --log-file "$TMP_DIR/ya_log.txt" --evlog-file "$TMP_DIR/ya_evlog.jsonl" \
- --cache-size 512G --link-threads "${{ inputs.link_threads }}" \
- "${extra_params[@]}" |& tee $TMP_DIR/ya_make.log && echo "status=true" >> $GITHUB_OUTPUT || (
- RC=$?
- echo "::debug::ya make RC=$RC"
- echo "status=failed" >> $GITHUB_OUTPUT
- )
- - name: sync logs to s3
- if: always()
- shell: bash
- run: |
- set -x
- echo "::group::s3-sync"
- s3cmd sync --acl-private --exclude="ya_make.log" --no-progress --stats --no-check-md5 "$TMP_DIR/" "$S3_BUCKET_PATH/build_logs/"
- s3cmd sync --acl-public --no-progress --stats --no-check-md5 "$TMP_DIR/ya_make.log" "$S3_BUCKET_PATH/build_logs/"
- echo "::endgroup::"
- - name: comment-build-status
- if: github.event_name == 'pull_request' || github.event_name == 'pull_request_target'
- shell: bash
- run: |
- set -x
- if [ "${{ steps.build.outputs.status }}" == "failed" ]; then
- curl -L -X POST -H "Accept: application/vnd.github+json" -H "Authorization: Bearer ${{github.token}}" -H "X-GitHub-Api-Version: 2022-11-28" \
- https://api.github.com/repos/${{github.repository}}/statuses/${{github.event.pull_request.head.sha}} \
- -d '{"state":"failure","description":"The check has been failed","context":"build_${{inputs.build_preset}}"}'
- echo "Build failed. see the [build logs]($LOG_URL)." | .github/scripts/tests/comment-pr.py --fail
- else
- curl -L -X POST -H "Accept: application/vnd.github+json" -H "Authorization: Bearer ${{github.token}}" -H "X-GitHub-Api-Version: 2022-11-28" \
- https://api.github.com/repos/${{github.repository}}/statuses/${{github.event.pull_request.head.sha}} \
- -d '{"state":"success","description":"The check has been completed successfully","context":"build_${{inputs.build_preset}}"}'
- echo "Build successful." | .github/scripts/tests/comment-pr.py --ok
- fi
- - name: show free space
- if: always()
- shell: bash
- run: df -h
|