summary refs log blame commit diff stats
path: root/.github/workflows/ci_docs.yml
blob: 74ca804f32772e875a1129e3783a4b49838b0b7b (plain) (tree)
1
2
3
4
5
6
7
8
9

                 
       
          

                                     
                           

                        



                                                      
                                       
                  
               
                                         
          

                                     
                           
                    




                                                      
                                       
 
 

        
         
                                                                                                                  














                                     



                                 












                                                                             
                                                                             


                                          
                                                                   














                                                                                     
                                 
                                                            




                                       


                                                    















                                                           
 





                                                     






                                       
                                   
 



                            

                                   

                                          
                                                     


                                                                            

                                                
                             

                                                   
name: Nim Docs CI
on:
  push:
    paths:
      - 'compiler/docgen.nim'
      - 'compiler/renderverbatim.nim'
      - 'config/nimdoc.cfg'
      - 'doc/**.rst'
      - 'doc/nimdoc.css'
      - 'lib/**.nim'
      - 'nimdoc/testproject/expected/testproject.html'
      - 'tools/dochack/dochack.nim'
      - 'tools/kochdocs.nim'
      - '.github/workflows/ci_docs.yml'
      - 'koch.nim'
  pull_request:
    # Run only on changes on these files.
    paths:
      - 'compiler/docgen.nim'
      - 'compiler/renderverbatim.nim'
      - 'config/nimdoc.cfg'
      - 'doc/**.rst'
      - 'doc/nimdoc.css'
      - 'lib/**.nim'
      - 'nimdoc/testproject/expected/testproject.html'
      - 'tools/dochack/dochack.nim'
      - 'tools/kochdocs.nim'
      - '.github/workflows/ci_docs.yml'


jobs:
  build:
    if: |
      !contains(format('{0} {1}', github.event.head_commit.message, github.event.pull_request.title), '[skip ci]')
    strategy:
      fail-fast: false
      matrix:
        target: [linux, windows, osx]
        include:
          - target: linux
            os: ubuntu-18.04
          - target: windows
            os: windows-2019
          - target: osx
            os: macos-10.15

    name: ${{ matrix.target }}
    runs-on: ${{ matrix.os }}

    steps:
      - name: 'Checkout'
        uses: actions/checkout@v2

      - name: 'Install build dependencies (macOS)'
        if: runner.os == 'macOS'
        run: brew install make

      - name: 'Install build dependencies (Windows)'
        if: runner.os == 'Windows'
        shell: bash
        run: |
          mkdir dist
          curl -L https://nim-lang.org/download/mingw64.7z -o dist/mingw64.7z
          curl -L https://nim-lang.org/download/dlls.zip -o dist/dlls.zip
          7z x dist/mingw64.7z -odist
          7z x dist/dlls.zip -obin
          echo "${{ github.workspace }}/dist/mingw64/bin" >> "${GITHUB_PATH}"

      - name: 'Add build binaries to PATH'
        shell: bash
        run: echo "${{ github.workspace }}/bin" >> "${GITHUB_PATH}"

      - name: 'Get current csources version'
        id: csources-version
        shell: bash
        run: |
          sha=$(git ls-remote https://github.com/nim-lang/csources master | cut -f 1)
          echo "::set-output name=sha::$sha"

      - name: 'Get prebuilt csources from cache'
        id: csources-cache
        uses: actions/cache@v1
        with:
          path: bin
          key: '${{ matrix.os }}-${{ steps.csources-version.outputs.sha }}'

      - name: 'Checkout csources'
        if: steps.csources-cache.outputs.cache-hit != 'true'
        uses: actions/checkout@v2
        with:
          repository: nim-lang/csources
          path: csources

      - name: 'Build 1-stage compiler from csources'
        shell: bash
        run: |
          ext=
          [[ '${{ runner.os }}' == 'Windows' ]] && ext=.exe
          if [[ ! -x bin/nim-csources$ext ]]; then
            ncpu=
            case '${{ runner.os }}' in
            'Linux')
              ncpu=$(nproc)
              ;;
            'macOS')
              ncpu=$(sysctl -n hw.ncpu)
              ;;
            'Windows')
              ncpu=$NUMBER_OF_PROCESSORS
              ;;
            esac
            [[ -z "$ncpu" || $ncpu -le 0 ]] && ncpu=1

            make -C csources -j $ncpu CC=gcc
            cp bin/nim{,-csources}$ext
          else
            echo 'Cache hit, using prebuilt csources'
            cp bin/nim{-csources,}$ext
          fi

      - name: 'Build koch'
        shell: bash
        run: nim c koch

      - name: 'Build the real compiler'
        shell: bash
        run: ./koch boot -d:release

      - name: 'Clone fusion'
        shell: bash
        run: ./koch fusion

      - name: 'Build documentation'
        shell: bash
        run: ./koch doc --git.commit:devel

      - name: 'Publish documentation to Github Pages'
        if: |
          github.event_name == 'push' && github.ref == 'refs/heads/devel' &&
          matrix.target == 'linux'
        uses: crazy-max/ghaction-github-pages@v1
        with:
          build_dir: doc/html
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}