diff options
author | Sebastian Ehlert <28669218+awvwgk@users.noreply.github.com> | 2021-09-13 16:45:55 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-09-13 16:45:55 +0200 |
commit | df8c9b4b318ed043030d076ee58393bf5d704f80 (patch) | |
tree | d30ac13cc24ace2894f50cb88f9a0c6ae10af98e /.github | |
parent | 6bbb3071bc4a7959071642c7a06942d8d784af7c (diff) | |
download | fpm-df8c9b4b318ed043030d076ee58393bf5d704f80.tar.gz fpm-df8c9b4b318ed043030d076ee58393bf5d704f80.zip |
Add workflow to create source releases (#563)
- add release workflow to generate source archives
- add workflow and script to automatically create single source file
Diffstat (limited to '.github')
-rw-r--r-- | .github/workflows/release.yml | 129 |
1 files changed, 129 insertions, 0 deletions
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..a3c5259 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,129 @@ +name: Release + +on: + push: + pull_request: + release: + types: [published] + +jobs: + source-archive: + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + format: [zip] + env: + FORMAT: ${{ matrix.format }} + steps: + - name: Checkout code + uses: actions/checkout@v2 + with: + fetch-depth: 0 + + - name: Get version number + run: | + VERSION=$(git describe --tags --match 'v*' --always | tr -d 'v') + echo "VERSION=${VERSION}" >> $GITHUB_ENV + + - name: Create archive + run: | + echo "OUTPUT=${{ env.OUTPUT }}" >> $GITHUB_ENV + git archive --prefix ${{ env.PREFIX }} --format ${{ env.FORMAT }} HEAD > ${{ env.OUTPUT }} + env: + OUTPUT: fpm-${{ env.VERSION }}.${{ env.FORMAT }} + PREFIX: fpm-${{ env.VERSION }}/ + + - name: Upload artifact + uses: actions/upload-artifact@v2 + with: + name: ${{ env.OUTPUT }} + path: ${{ env.OUTPUT }} + + source-single-file: + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v2 + with: + fetch-depth: 0 + + - name: Get version number + run: | + VERSION=$(git describe --tags --match 'v*' --always | tr -d 'v') + echo "VERSION=${VERSION}" >> $GITHUB_ENV + + # Note: this step is meant to remove the test targets from the package manifest, + # a change in the package manifest might require to regenerate the patch file. + - name: Remove tests + run: | + patch -p1 < ./ci/single-file.patch + + - name: Install fpm + uses: fortran-lang/setup-fpm@v3 + with: + fpm-version: 'v0.4.0' + + - name: Create single file version + run: | + echo "OUTPUT=${{ env.OUTPUT }}" >> $GITHUB_ENV + echo "#define FPM_BOOTSTRAP" > fpm-${{ env.VERSION }}.F90 + fpm build --compiler ./ci/single-file-gfortran.sh + env: + OUTPUT: fpm-${{ env.VERSION }}.F90 + OMP_NUM_THREADS: 1 + + # Building the bootstrap version from the single source version is the most expensive + # step in this workflow, since we have to compile several thousand lines of source. + - name: Build single source version + run: | + echo "EXE=${{ env.BUILD_DIR }}/fpm" >> $GITHUB_ENV + mkdir ${{ env.BUILD_DIR }} + gfortran ${{ env.OUTPUT }} -J ${{ env.BUILD_DIR }} -o ${{ env.BUILD_DIR }}/fpm + env: + BUILD_DIR: build/bootstrap + + - name: Undo patch + run: | + patch -p1 -R < ./ci/single-file.patch + + - name: Build fpm with bootstrap version + run: | + ${{ env.EXE }} build + + - name: Upload artifact + uses: actions/upload-artifact@v2 + with: + name: ${{ env.OUTPUT }} + path: ${{ env.OUTPUT }} + + upload-artifacts: + if: github.event_name == 'release' + runs-on: ubuntu-latest + needs: + - source-archive + - source-single-file + + steps: + - name: Download Artifacts + uses: actions/download-artifact@v2 + with: + path: ${{ github.workspace }} # This will download all files + + - name: Create SHA256 checksums + run: | + for output in fpm-*/fpm-*; do + pushd $(dirname "$output") + sha256sum $(basename "$output") | tee $(basename "$output").sha256 + popd + done + + - 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 |