aboutsummaryrefslogtreecommitdiff
path: root/.github/workflows/CI.yml
diff options
context:
space:
mode:
authorSebastian Ehlert <28669218+awvwgk@users.noreply.github.com>2021-03-31 11:45:33 +0200
committerGitHub <noreply@github.com>2021-03-31 11:45:33 +0200
commita4e8d225184f3bb721528e13a6995de0f920e65b (patch)
treef74239f9af67b866ef0921ad26df5b7cd6ef36f6 /.github/workflows/CI.yml
parent799fcacee02e60a1679116765c4c3669d31e7201 (diff)
downloadfpm-a4e8d225184f3bb721528e13a6995de0f920e65b.tar.gz
fpm-a4e8d225184f3bb721528e13a6995de0f920e65b.zip
Split workflow for Haskell and Fortran fpm (#419)
Diffstat (limited to '.github/workflows/CI.yml')
-rw-r--r--.github/workflows/CI.yml200
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