summaryrefslogtreecommitdiff
path: root/.github/workflows/ci.yml
blob: 64e2463ee55adabc8991ec0be025fc7e4516afa1 (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
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
name: CI
on:
  push:
    branches: ['**']
    paths-ignore: ['*.adoc', 'docs/**']
  pull_request:
    paths-ignore: ['*.adoc', 'docs/**']
  schedule:
  - cron: '0 2 * * *'
permissions: read-all
jobs:
  activate:
    if: |
      (github.event_name == 'schedule' && github.repository_owner == 'asciidoctor') ||
      github.event_name == 'push' || github.event_name == 'workflow_dispatch' ||
      (github.event_name == 'pull_request' && !startsWith(github.head_ref, 'docs/'))
    runs-on: ubuntu-latest
    steps:
    - name: Proceed
      run: echo ok go
  build:
    needs: activate
    strategy:
      matrix:
        os: [ubuntu-latest, windows-latest]
        ruby: [jruby-9.4.2.0, '2.3', '2.7', '3.0', '3.2']
        asciimath-version: [~]
        haml-version: [~]
        pygments-version: ['~> 2.3.0']
        rouge-version: [~]
        exclude:
        # remove 3.2 on ubuntu-latest to mark as primary
        - os: ubuntu-latest
          ruby: '3.2'
        include:
        - os: ubuntu-latest
          ruby: truffleruby-22.2.0
        - os: ubuntu-latest
          ruby: jruby-9.1.17.0
          pygments-version: ~
        - os: windows-latest
          ruby: jruby-9.1.17.0
          pygments-version: ~
        - os: macos-latest
          ruby: '3.2'
        - os: ubuntu-latest
          ruby: '2.3'
          asciimath-version: '~> 1.0.0'
        - os: ubuntu-latest
          ruby: '2.3'
          haml-version: '~> 5.2.0'
        - os: ubuntu-latest
          ruby: '2.3'
          rouge-version: '~> 2.0.0'
        - os: ubuntu-latest
          ruby: '3.2'
          primary: primary
    runs-on: ${{ matrix.os }}
    env:
      BUNDLE_WITHOUT: coverage:docs
      SOURCE_DATE_EPOCH: '1521504000'
      # work around `Permission denied - NUL' error when installing/using the bundler gem on JRuby for Windows
      JRUBY_OPTS: '-J-Djdk.io.File.enableADS=true'
    steps:
    - name: Checkout
      uses: actions/checkout@v3
    - name: Install prerequisites for Nokogiri (Linux)
      if: matrix.os == 'ubuntu-latest'
      run: sudo apt-get install libxslt1-dev
    - name: Configure Nokogiri installation (Linux, macOS)
      if: matrix.os == 'macos-latest' || matrix.os == 'ubuntu-latest'
      run: echo 'BUNDLE_BUILD__NOKOGIRI=--use-system-libraries' >> $GITHUB_ENV
    - name: Set AsciiMath version
      if: matrix.asciimath-version
      run: echo 'ASCIIMATH_VERSION=${{ matrix.asciimath-version }}' >> $GITHUB_ENV
    - name: Set Pygments version
      if: matrix.pygments-version
      run: echo 'PYGMENTS_VERSION=${{ matrix.pygments-version }}' >> $GITHUB_ENV
    - name: Set Rouge version
      if: matrix.rouge-version
      run: echo 'ROUGE_VERSION=${{ matrix.rouge-version }}' >> $GITHUB_ENV
    - name: Enable coverage (primary only)
      if: matrix.primary
      run: |
        echo 'BUNDLE_WITHOUT=docs' >> $GITHUB_ENV
        echo 'COVERAGE=true' >> $GITHUB_ENV
    - name: Upgrade Java (JRuby for Windows)
      if: matrix.os == 'windows-latest' && matrix.ruby == 'jruby-9.4.2.0'
      uses: actions/setup-java@v3
      with:
        distribution: temurin
        java-version: '17'
    - name: Install Ruby (uses cached dependencies for non-scheduled build)
      uses: ruby/setup-ruby@v1
      with:
        ruby-version: ${{ matrix.ruby }}
        bundler: ${{ matrix.os == 'windows-latest' && '2.3.22' || 'default' }}
        bundler-cache: ${{ github.event_name != 'schedule' }}
    - name: Install dependencies (scheduled build only)
      if: github.event_name == 'schedule'
      run: |
        bundle config --local path vendor/bundle
        bundle --jobs 3 --retry 3
    - name: Check default stylesheet
      if: matrix.primary
      run: |
        cd src/stylesheets
        npm i --silent --no-audit --no-fund --no-package-lock --no-progress
        npm run lint
        npm run build
        cd -
        if [ -n "$(git diff --name-only -- data/stylesheets)" ]; then
          echo 'Detected the following uncommitted changes to the default stylesheet:'
          git diff
          exit 1
        fi
    - name: Run tests
      run: bundle exec ruby -w $(bundle exec ruby -e 'print File.join Gem.bindir, %q(rake)') test:all
  build-dependents:
    name: build:dependents
    if: success() && github.event_name == 'push' && github.repository == 'asciidoctor/asciidoctor'
    needs: build
    runs-on: ubuntu-latest
    env:
      BUNDLE_WITHOUT: docs:coverage
    steps:
    - name: Checkout
      uses: actions/checkout@v3
    - name: Install Ruby
      uses: ruby/setup-ruby@v1
      with:
        ruby-version: '3.2'
        bundler-cache: true
    - name: Build dependents
      env:
        GITHUB_API_TOKEN: ${{ secrets._GITHUB_API_TOKEN }}
      run: bundle exec rake build:dependents