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.5.0, '2.7', '3.0', '3.3'] asciimath-version: [~] haml-version: [~] pygments-version: ['~> 2.3.0'] rouge-version: [~] exclude: # remove 3.3 on ubuntu-latest to mark as primary - os: ubuntu-latest ruby: '3.3' 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.3' - 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.3' primary: primary runs-on: ${{ matrix.os }} env: BUNDLE_WITHOUT: coverage:docs:lint SOURCE_DATE_EPOCH: '1521504000' steps: - name: Checkout uses: actions/checkout@v4 - 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@v4 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@v4 - name: Install Ruby uses: ruby/setup-ruby@v1 with: ruby-version: '3.3' bundler-cache: true - name: Build dependents env: GITHUB_API_TOKEN: ${{ secrets._GITHUB_API_TOKEN }} run: bundle exec rake build:dependents