name: Build (ya make) description: Build targets inputs: build_target: required: false description: "build target" build_preset: required: true default: "relwithdebinfo" description: "relwithdebinfo, release-asan, release-tsan" 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" runs: using: "composite" steps: - name: Init id: init shell: bash env: build_preset: ${{ inputs.build_preset }} run: | echo "SHELLOPTS=xtrace" >> $GITHUB_ENV export TMP_DIR=$(pwd)/tmp_build echo "TMP_DIR=$TMP_DIR" >> $GITHUB_ENV rm -rf $TMP_DIR && mkdir $TMP_DIR echo "BUILD_PRESET=$build_preset" >> $GITHUB_ENV echo "GITHUB_TOKEN=${{ github.token }}" >> $GITHUB_ENV - name: build id: build shell: bash run: | 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 [ ! -z "${{ inputs.bazel_remote_username }}" ]; 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-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 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 -D'BUILD_LANGUAGES=CPP PY3 PY2 GO' -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 || ( RC=$? echo "::debug::ya make RC=$RC" echo "status=failed" >> $GITHUB_OUTPUT ) - name: sync logs to s3 if: always() shell: bash run: | 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: | log_url="$S3_URL_PREFIX/build_logs/ya_make.log" if [ "${{ steps.build.outputs.status }}" == "failed" ]; then echo "Build failed. see the [build logs]($log_url)." | .github/scripts/tests/comment-pr.py --fail else echo "Build successful." | .github/scripts/tests/comment-pr.py --ok fi - name: show free space if: always() shell: bash run: df -h