diff options
Diffstat (limited to '.github/workflows')
-rw-r--r-- | .github/workflows/CI.yml | 200 |
1 files changed, 183 insertions, 17 deletions
diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 9ab8f5c..9fc7918 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -1,6 +1,6 @@ name: CI -on: +on: push: pull_request: release: @@ -16,7 +16,7 @@ env: RUST_BACKTRACE: "full" # Make Rust print full backtrace on error jobs: - Build: + stack-build: runs-on: ${{ matrix.os }} strategy: fail-fast: false @@ -88,7 +88,7 @@ jobs: uses: nanzm/get-time-action@v1.0 with: format: 'YYYY-MM' - + - name: Setup github actions cache id: cache uses: actions/cache@v2 @@ -98,9 +98,9 @@ jobs: - name: Build Haskell fpm run: | - cd bootstrap stack build stack install + working-directory: bootstrap - name: put fpm to PATH (macOS) if: contains(matrix.os, 'macos') @@ -116,34 +116,200 @@ jobs: if: contains(matrix.os, 'ubuntu') run: | sudo cp /home/runner/.local/bin/fpm /usr/local/bin - + - name: Run tests on Haskell fpm run: | - cd bootstrap stack test - - - name: Build and test Fortran fpm - run: ${{ matrix.TEST_SCRIPT }} - - - name: Build and test Fortran fpm (release version) - run: ${{ matrix.TEST_SCRIPT }} ${{ matrix.RELEASE_FLAGS }} + working-directory: bootstrap # ----- Upload binaries if creating a release ----- - name: Check that fpm --version matches release tag if: github.event_name == 'release' run: | - cd fpm ${{ matrix.GET_VERSION_CMD }} > fpm_version - fpm run -- "--version" | ${{ matrix.CHECK_VERSION_CMD }} + working-directory: fpm - name: Stage release files for upload if: github.event_name == 'release' run: | - cd fpm - fpm run ${{ matrix.RELEASE_FLAGS }} --runner ${{ matrix.RELEASE_CMD }} ${{ matrix.BOOTSTRAP_RELEASE_CMD }} ${{ matrix.HASH_CMD }} - + working-directory: fpm + + - name: Upload assets + if: github.event_name == 'release' + uses: svenstaro/upload-release-action@v2 + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: fpm/fpm-* + file_glob: true + tag: ${{ github.ref }} + overwrite: true + + build: + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, macos-latest, windows-latest] + gcc_v: [9] # Version of GFortran we want to use. + include: + - os: ubuntu-latest + os-arch: linux-x86_64 + release-flags: --flag '--static -g -fbacktrace -O3' + sha256sum: sha256sum + + - os: macos-latest + os-arch: macos-x86_64 + release-flags: --flag '-g -fbacktrace -O3' + sha256sum: shasum -a 256 + + - os: windows-latest + os-arch: windows-x86_64 + release-flags: --flag '--static -g -fbacktrace -O3' + exe: .exe + sha256sum: sha256sum + + env: + FC: gfortran + GCC_V: ${{ matrix.gcc_v }} + + steps: + - name: Checkout code + uses: actions/checkout@v1 + + - name: Install GFortran macOS + if: contains(matrix.os, 'macos') + run: | + ln -s /usr/local/bin/gfortran-${GCC_V} /usr/local/bin/gfortran + which gfortran-${GCC_V} + which gfortran + + - name: Install GFortran Linux + if: contains(matrix.os, 'ubuntu') + run: | + sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-${GCC_V} 100 \ + --slave /usr/bin/gfortran gfortran /usr/bin/gfortran-${GCC_V} \ + --slave /usr/bin/gcov gcov /usr/bin/gcov-${GCC_V} + + # Phase 1: Bootstrap fpm with existing version + - name: Install fpm + uses: fortran-lang/setup-fpm@v3 + with: + fpm-version: 'v0.2.0' + + - name: Remove fpm from path + shell: bash + run: | + mv $(which fpm) fpm-bootstrap${{ matrix.exe }} + echo "BOOTSTRAP=$PWD/fpm-bootstrap" | cat >> $GITHUB_ENV + + - name: Build Fortran fpm (bootstrap) + shell: bash + run: | + ${{ env.BOOTSTRAP }} build + working-directory: fpm + + - name: Run Fortran fpm (bootstrap) + shell: bash + run: | + ${{ env.BOOTSTRAP }} run + ${{ env.BOOTSTRAP }} run -- --version + ${{ env.BOOTSTRAP }} run -- --help + working-directory: fpm + + - name: Test Fortran fpm (bootstrap) + shell: bash + run: | + ${{ env.BOOTSTRAP }} test + working-directory: fpm + + - name: Install Fortran fpm (bootstrap) + shell: bash + run: | + ${{ env.BOOTSTRAP }} install + working-directory: fpm + + # Phase 2: Bootstrap fpm with itself + - name: Replace bootstrapping version + shell: bash + run: | + ${{ env.BOOTSTRAP }} run --runner cp -- fpm-debug${{ matrix.exe }} + rm -v ${{ env.BOOTSTRAP }} + echo "FPM=$PWD/fpm-debug" | cat >> $GITHUB_ENV + working-directory: fpm + + - name: Get version (normal) + if: github.event_name != 'release' + shell: bash + run: | + VERSION=$(git rev-parse --short HEAD) + echo "VERSION=$VERSION" | cat >> $GITHUB_ENV + + - name: Get version (release) + if: github.event_name == 'release' + shell: bash + run: | + VERSION=$(echo ${{ github.ref }} | cut -dv -f2) + echo "VERSION=$VERSION" | cat >> $GITHUB_ENV + FPM_VERSION=$(${{ env.FPM }} --version | grep -o '${{ env.REGEX }}') + [ "$VERSION" = "$FPM_VERSION" ] + env: + REGEX: '[0-9]\{1,4\}\.[0-9]\{1,4\}\.[0-9]\{1,4\}' + + - name: Build example packages + shell: bash + run: | + ci/run_tests.sh "${{ env.FPM }}" + + - name: Build Fortran fpm + shell: bash + run: | + ${{ env.FPM }} build ${{ matrix.release-flags }} + working-directory: fpm + + - name: Run Fortran fpm + shell: bash + run: | + ${{ env.FPM }} run ${{ matrix.release-flags }} + ${{ env.FPM }} run ${{ matrix.release-flags }} -- --version + ${{ env.FPM }} run ${{ matrix.release-flags }} -- --help + working-directory: fpm + + - name: Test Fortran fpm + shell: bash + run: | + ${{ env.FPM }} test ${{ matrix.release-flags }} + working-directory: fpm + + - name: Install Fortran fpm + shell: bash + run: | + ${{ env.FPM }} install ${{ matrix.release-flags }} + working-directory: fpm + + - name: Package release version + shell: bash + run: | + ${{ env.FPM }} run ${{ matrix.release-flags }} --runner cp -- ${{ env.EXE }} + rm -v ${{ env.FPM }} + echo "FPM_RELEASE=$PWD/${{ env.EXE }}" | cat >> $GITHUB_ENV + working-directory: fpm + env: + EXE: fpm-${{ env.VERSION }}-${{ matrix.os-arch }}${{ matrix.exe }} + + - name: Run release version + shell: bash + run: | + ci/run_tests.sh "${{ env.FPM_RELEASE }}" + + - name: Stage release files for upload + if: github.event_name == 'release' + shell: bash + run: | + ${{ matrix.sha256sum }} ${{ env.FPM_RELEASE }} > ${{ env.FPM_RELEASE }}.sha256 + working-directory: fpm + - name: Upload assets if: github.event_name == 'release' uses: svenstaro/upload-release-action@v2 |