summaryrefslogtreecommitdiff
path: root/.github/workflows/mingw.yml
blob: d8c075fc7a64ab335b241740d04046be53016b95 (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
name: MinGW
on:
  push:
    paths-ignore:
      - 'doc/**'
      - '**/man'
      - '**.md'
      - '**.rdoc'
      - '**/.document'
      - '.*.yml'
  pull_request:
    paths-ignore:
      - 'doc/**'
      - '**/man'
      - '**.md'
      - '**.rdoc'
      - '**/.document'
      - '.*.yml'
  merge_group:

concurrency:
  group: ${{ github.workflow }} / ${{ startsWith(github.event_name, 'pull') && github.ref_name || github.sha }}
  cancel-in-progress: ${{ startsWith(github.event_name, 'pull') }}

permissions:
  contents: read

# Notes:
# Actions console encoding causes issues, see test-all & test-spec steps
#
jobs:
  make:
    runs-on: windows-2022

    name: ${{ github.workflow }} (${{ matrix.msystem }})

    env:
      MSYSTEM: ${{ matrix.msystem }}
      MSYS2_ARCH: x86_64
      CHOST: 'x86_64-w64-mingw32'
      CFLAGS: '-march=x86-64 -mtune=generic -O3 -pipe'
      CXXFLAGS: '-march=x86-64 -mtune=generic -O3 -pipe'
      CPPFLAGS: '-D_FORTIFY_SOURCE=2 -D__USE_MINGW_ANSI_STDIO=1 -DFD_SETSIZE=2048'
      LDFLAGS: '-pipe'
      GITPULLOPTIONS: --no-tags origin ${{ github.ref }}

    strategy:
      matrix:
        include:
          # To mitigate flakiness of MinGW CI, we test only one runtime that newer MSYS2 uses.
          - msystem: 'UCRT64'
            baseruby: '3.0'
            test_task: 'check'
            test-all-opts: '--name=!/TestObjSpace#test_reachable_objects_during_iteration/'
      fail-fast: false

    if: >-
      ${{!(false
      || contains(github.event.head_commit.message, '[DOC]')
      || contains(github.event.head_commit.message, 'Document')
      || contains(github.event.pull_request.title, '[DOC]')
      || contains(github.event.pull_request.title, 'Document')
      || contains(github.event.pull_request.labels.*.name, 'Document')
      || (github.event_name == 'push' && github.actor == 'dependabot[bot]')
      )}}

    steps:
      - name: Set up Ruby & MSYS2
        uses: ruby/setup-ruby@6bd3d993c602f6b675728ebaecb2b569ff86e99b # v1.174.0
        with:
          ruby-version: ${{ matrix.baseruby }}

      - name: where check
        run: |
          # show where
          mv /c/Windows/System32/libcrypto-1_1-x64.dll /c/Windows/System32/libcrypto-1_1-x64.dll_
          mv /c/Windows/System32/libssl-1_1-x64.dll    /c/Windows/System32/libssl-1_1-x64.dll_
          result=true
          for e in gcc.exe ragel.exe make.exe libcrypto-1_1-x64.dll libssl-1_1-x64.dll; do
            echo ::group::$'\033[93m'$e$'\033[m'
            where $e || result=false
            echo ::endgroup::
          done
          $result
        working-directory:

      - name: version check
        run: |
          # show version
          result=true
          for e in gcc ragel make "openssl version"; do
            case "$e" in *" "*) ;; *) e="$e --version";; esac
            echo ::group::$'\033[93m'$e$'\033[m'
            $e || result=false
            echo ::endgroup::
          done
          $result
        working-directory:

      - uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2
        with:
          sparse-checkout-cone-mode: false
          sparse-checkout: /.github

      - uses: ./.github/actions/setup/directories
        with:
          srcdir: src
          builddir: build
          makeup: true

      - name: configure
        run: >
          ../src/configure --disable-install-doc --prefix=/.
          --build=$CHOST --host=$CHOST --target=$CHOST

      - name: make all
        timeout-minutes: 30
        run: make

      - name: make install
        run: make DESTDIR=../install install-nodoc

      - name: test
        timeout-minutes: 30
        run: make test
        shell: cmd
        env:
          GNUMAKEFLAGS: ''
          RUBY_TESTOPTS: '-v --tty=no'
        if: ${{ matrix.test_task == 'check' || matrix.test_task == 'test' }}

      - name: test-all
        timeout-minutes: 45
        shell: cmd
        run: |
          make ${{ StartsWith(matrix.test_task, 'test/') && matrix.test_task || 'test-all' }}
        env:
          RUBY_TESTOPTS: >-
            --retry --job-status=normal --show-skip --timeout-scale=1.5
            ${{ matrix.test-all-opts }}
          BUNDLER_VERSION:
        if: ${{ matrix.test_task == 'check' || matrix.test_task == 'test-all' || StartsWith(matrix.test_task, 'test/') }}

      - name: test-spec
        timeout-minutes: 10
        run: |
          make ${{ StartsWith(matrix.test_task, 'spec/') && matrix.test_task || 'test-spec' }}
        shell: cmd
        if: ${{ matrix.test_task == 'check' || matrix.test_task == 'test-spec' || StartsWith(matrix.test_task, 'spec/') }}

      - uses: ./src/.github/actions/slack
        with:
          label: ${{ matrix.msystem }} / ${{ matrix.test_task }}
          SLACK_WEBHOOK_URL: ${{ secrets.SIMPLER_ALERTS_URL }} # ruby-lang slack: ruby/simpler-alerts-bot
        if: ${{ failure() }}

defaults:
  run:
    working-directory: build
    shell: sh