summaryrefslogtreecommitdiff
path: root/.github/workflows/ci.yml
blob: 6389c7881e50b05b09e1ae53c0d3703390dce9d5 (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
138
139
140
141
142
143
144
145
146
147
148
149
150
name: CI
on:
  push:
    branches: ['**']
    paths-ignore: ['*.adoc', 'docs/**']
  pull_request:
    paths-ignore: ['*.adoc', 'docs/**']
  schedule:
  - cron: '0 2 * * *'
  workflow_dispatch:
concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true
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.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.2.21.0
          pygments-version: ~
        - os: windows-latest
          ruby: jruby-9.2.21.0
          pygments-version: ~
        - os: macos-latest
          ruby: '3.2'
        - os: ubuntu-latest
          ruby: '2.7'
          asciimath-version: '~> 1.0.0'
        - os: ubuntu-latest
          ruby: '2.7'
          haml-version: '~> 5.2.0'
        - os: ubuntu-latest
          ruby: '2.7'
          pygments-version: '~> 1.2.0'
        - os: ubuntu-latest
          ruby: '2.7'
          rouge-version: '~> 2.0.0'
        - os: ubuntu-latest
          ruby: '3.2'
          primary: primary
    runs-on: ${{ matrix.os }}
    env:
      BUNDLE_WITHOUT: coverage:docs:lint
      SOURCE_DATE_EPOCH: '1521504000'
    steps:
    - name: Checkout
      uses: actions/checkout@v3
    - 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: Install prerequisites for Pygments ~> 1.2.0 (Linux)
      if: matrix.os == 'ubuntu-latest' && matrix.pygments-version == '~> 1.2.0'
      run: sudo apt-get install python2
    - name: Set Rouge version
      if: matrix.rouge-version
      run: echo 'ROUGE_VERSION=${{ matrix.rouge-version }}' >> $GITHUB_ENV
    - name: Enable lint and 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' && startsWith(matrix.ruby, 'jruby-')
      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: Run linter
      if: matrix.primary
      run: bundle exec rake lint
    - 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 --no-pager 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
    - name: Install gem and doc
      if: |
        !startsWith(matrix.ruby, 'truffleruby-') && (matrix.os != 'windows-latest' || !startsWith(matrix.ruby, 'jruby-9.2.'))
      run: |
        ruby -r fileutils -e "FileUtils.rmtree 'pkg'"
        bundle exec gem build asciidoctor.gemspec -o asciidoctor.gem
        bundle exec gem install --local --document rdoc,ri asciidoctor.gem
        bundle exec gem uninstall -ax asciidoctor
  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:lint: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