summaryrefslogtreecommitdiffstats
path: root/fluent-bit/.github/workflows/call-build-windows.yaml
blob: 7adc229a7acf1fdcf718bec424db6a4b24778634 (plain)
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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
---
name: Reusable workflow to build Windows packages optionally into S3 bucket

on:
  workflow_call:
    inputs:
      version:
        description: The version of Fluent Bit to create.
        type: string
        required: true
      ref:
        description: The commit, tag or branch of Fluent Bit to checkout for building that creates the version above.
        type: string
        required: true
      environment:
        description: The Github environment to run this workflow on.
        type: string
        required: false
      unstable:
        description: Optionally add metadata to build to indicate an unstable build, set to the contents you want to add.
        type: string
        required: false
        default: ''
    secrets:
      token:
        description: The Github token or similar to authenticate with.
        required: true
      bucket:
        description: The name of the S3 (US-East) bucket to push packages into.
        required: false
      access_key_id:
        description: The S3 access key id for the bucket.
        required: false
      secret_access_key:
        description: The S3 secret access key for the bucket.
        required: false

jobs:

  call-build-windows-get-meta:
    name: Determine build info
    runs-on: ubuntu-latest
    permissions:
      contents: read
    outputs:
      armSupported: ${{ steps.armcheck.outputs.armSupported }}
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4
        with:
          ref: ${{ inputs.ref }}

      - name: Determine if we are doing a build with ARM support
        id: armcheck
        # Check for new contents from https://github.com/fluent/fluent-bit/pull/6621
        run: |
          if grep -q "winarm64" CMakeLists.txt ; then
            echo "armSupported=true" >> $GITHUB_OUTPUT
          else
            echo "armSupported=false" >> $GITHUB_OUTPUT
          fi
        shell: bash

  call-build-windows-package:
    runs-on: windows-latest
    environment: ${{ inputs.environment }}
    needs:
      - call-build-windows-get-meta
    strategy:
      fail-fast: false
      matrix:
        config:
          - name: "Windows 32bit"
            arch: x86
            openssl_dir: C:\vcpkg\packages\openssl_x86-windows-static
            cmake_additional_opt: ""
            vcpkg_triplet: x86-windows-static
          - name: "Windows 64bit"
            arch: x64
            openssl_dir: C:\vcpkg\packages\openssl_x64-windows-static
            cmake_additional_opt: ""
            vcpkg_triplet: x64-windows-static
          - name: "Windows 64bit (Arm64)"
            arch: amd64_arm64
            openssl_dir: C:\vcpkg\packages\openssl_arm64-windows-static
            cmake_additional_opt: "-DCMAKE_SYSTEM_NAME=Windows -DCMAKE_SYSTEM_VERSION=10.0 -DCMAKE_SYSTEM_PROCESSOR=ARM64"
            vcpkg_triplet: arm64-windows-static
    permissions:
      contents: read
    # Default environment variables can be overridden below. To prevent library pollution - without this other random libraries may be found on the path leading to failures.
    env:
      PATH: C:\ProgramData\Chocolatey\bin;c:/Program Files/Git/cmd;c:/Windows/system32;C:/Windows/System32/WindowsPowerShell/v1.0;$ENV:WIX/bin;C:/Program Files/CMake/bin;C:\vcpkg;
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4
        with:
          ref: ${{ inputs.ref }}

      - name: Get dependencies
        run: |
          Invoke-WebRequest -O winflexbison.zip $env:WINFLEXBISON
          Expand-Archive winflexbison.zip -Destination C:\WinFlexBison
          Copy-Item -Path C:\WinFlexBison/win_bison.exe C:\WinFlexBison/bison.exe
          Copy-Item -Path C:\WinFlexBison/win_flex.exe C:\WinFlexBison/flex.exe
          echo "C:\WinFlexBison" | Out-File -FilePath $env:GITHUB_PATH -Append
        env:
          WINFLEXBISON: https://github.com/lexxmark/winflexbison/releases/download/v2.5.22/win_flex_bison-2.5.22.zip
        shell: pwsh

      - name: Set up with Developer Command Prompt for Microsoft Visual C++
        uses: ilammy/msvc-dev-cmd@v1
        with:
          arch: ${{ matrix.config.arch }}

      - name: Get gzip command w/ chocolatey
        uses: crazy-max/ghaction-chocolatey@v3
        with:
          args: install gzip -y

      # http://man7.org/linux/man-pages/man1/date.1.html
      - name: Get Date
        id: get-date
        run: |
          echo "date=$(/bin/date -u "+%Y%m%d")" >> $GITHUB_OUTPUT
        shell: bash

      - name: Restore cached packages of vcpkg
        id: cache-vcpkg-sources
        uses: actions/cache/restore@v3
        with:
          path: |
            C:\vcpkg\packages
          key: ${{ runner.os }}-${{ matrix.config.arch }}-vcpkg-${{ steps.get-date.outputs.date }}
          restore-keys: |
            ${{ runner.os }}-${{ matrix.config.arch }}-vcpkg-
          enableCrossOsArchive: false

      - name: Build openssl with vcpkg
        run: |
          C:\vcpkg\vcpkg install --recurse openssl --triplet ${{ matrix.config.vcpkg_triplet }}
        shell: cmd

      - name: Build libyaml with vcpkg
        run: |
          C:\vcpkg\vcpkg install --recurse libyaml --triplet ${{ matrix.config.vcpkg_triplet }}
        shell: cmd

      - name: Save packages of vcpkg
        id: save-vcpkg-sources
        uses: actions/cache/save@v3
        with:
          path: |
            C:\vcpkg\packages
          key: ${{ steps.cache-vcpkg-sources.outputs.cache-primary-key }}
          enableCrossOsArchive: false

      - name: Build Fluent Bit packages
        # If we are using 2.0.* or earlier we need to exclude the ARM64 build as the dependencies fail to compile.
        # Trying to do via an exclude for the job triggers linting errors.
        # This is only supposed to be a workaround for now so can be easily removed later.
        if: ${{ matrix.config.arch != 'amd64_arm64' || needs.call-build-windows-get-meta.outputs.armSupported == 'true' }}
        run: |
          cmake -G "NMake Makefiles" -DFLB_NIGHTLY_BUILD='${{ inputs.unstable }}' -DOPENSSL_ROOT_DIR='${{ matrix.config.openssl_dir }}' ${{ matrix.config.cmake_additional_opt }} -DFLB_LIBYAML_DIR=C:\vcpkg\packages\libyaml_${{ matrix.config.vcpkg_triplet }} ../
          cmake --build .
          cpack
        working-directory: build

      - name: Upload build packages
        # Skip upload if we skipped build.
        if: ${{ matrix.config.arch != 'amd64_arm64' || needs.call-build-windows-get-meta.outputs.armSupported == 'true' }}
        uses: actions/upload-artifact@v3
        with:
          name: windows-packages
          path: |
            build/*-bit-*.exe
            build/*-bit-*.msi
            build/*-bit-*.zip
          if-no-files-found: error

  call-build-windows-s3-upload:
    name: Handle upload to S3
    # The environment must be used that has access to any secrets required, even if passed in.
    # If passed in but not in the environment here you end up with an empty secret.
    environment: ${{ inputs.environment }}
    runs-on: ubuntu-latest
    needs:
      - call-build-windows-package
    permissions:
      contents: read
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4
        with:
          # Need latest for checksum packaging script
          ref: master

      - name: Download all artefacts
        continue-on-error: true
        uses: actions/download-artifact@v3
        with:
          name: windows-packages
          path: artifacts/

      - name: Set up Windows checksums
        run: |
          packaging/windows-checksums.sh
          ls -lR artifacts/
        shell: bash
        env:
          SOURCE_DIR: artifacts

      - name: Push Windows packages to S3
        # Only upload for staging
        if: inputs.environment == 'staging'
        uses: ./.github/actions/sync-to-bucket
        with:
          bucket: ${{ secrets.bucket }}
          access_key_id: ${{ secrets.access_key_id }}
          secret_access_key: ${{ secrets.secret_access_key }}
          bucket-directory: "${{ inputs.version }}/windows/"
          source-directory: "artifacts/"