-
Notifications
You must be signed in to change notification settings - Fork 99
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add workflow to create source releases (#563)
- add release workflow to generate source archives - add workflow and script to automatically create single source file
- Loading branch information
Showing
3 changed files
with
169 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
#!/usr/bin/env bash | ||
|
||
output="${OUTPUT:-fpm-single-file.F90}" | ||
|
||
args=("$@") | ||
file=$(printf "%s\n" "${args[@]}" | grep -P '^.+\.[fF]90$') | ||
if [ $? = 0 ]; then | ||
echo " + Appending source file '$file' to '${output}'" | ||
cat $file >> "${output}" | ||
fi | ||
exec gfortran "${args[@]}" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
diff --git a/fpm.toml b/fpm.toml | ||
index 12ec05aa..20425dfd 100644 | ||
--- a/fpm.toml | ||
+++ b/fpm.toml | ||
@@ -14,22 +14,5 @@ rev = "2f5eaba864ff630ba0c3791126a3f811b6e437f3" | ||
git = "https://github.com/urbanjost/M_CLI2.git" | ||
rev = "ea6bbffc1c2fb0885e994d37ccf0029c99b19f24" | ||
|
||
-[[test]] | ||
-name = "cli-test" | ||
-source-dir = "test/cli_test" | ||
-main = "cli_test.f90" | ||
- | ||
-[[test]] | ||
-name = "new-test" | ||
-source-dir = "test/new_test" | ||
-main = "new_test.f90" | ||
- | ||
-[[test]] | ||
-name = "fpm-test" | ||
-source-dir = "test/fpm_test" | ||
-main = "main.f90" | ||
- | ||
-[[test]] | ||
-name = "help-test" | ||
-source-dir = "test/help_test" | ||
-main = "help_test.f90" | ||
+[build] | ||
+auto-tests = false |