aboutsummaryrefslogtreecommitdiffstats
path: root/.github/actions/build_ya/action.yml
blob: 7ebcd115aba2b06324c6246db8c439e4ac72d466 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
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
      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
    
    - name: 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)
        fi
        
        case "${{ inputs.build_preset }}" in
          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)
            ;;
          *)
            echo "Invalid preset: ${{ inputs.build_preset }}"
            exit 1
            ;;
        esac
        
        ./ya make -k --build "${build_type}" --force-build-depends -D'BUILD_LANGUAGES=CPP PY3 PY2 GO' -T --stat  \
          --log-file "$TMP_DIR/ya_log.txt" --evlog-file "$TMP_DIR/ya_evlog.jsonl" \
          --dump-graph --dump-graph-to-file "$TMP_DIR/ya_graph.json" \
          --cache-size 512G --link-threads "${{ inputs.link_threads }}" \
          "${extra_params[@]}"

    - name: sync logs to s3
      if: always()
      shell: bash
      run: |
        echo "::group::s3-sync"
        s3cmd sync --acl-private --no-progress --stats --no-check-md5 "$TMP_DIR/" "$S3_BUCKET_PATH/build_logs/"
        echo "::endgroup::"

    - name: show free space
      if: always()
      shell: bash
      run: df -h