From a460e2760a4e33f086c9e1669b08e53885bdc197 Mon Sep 17 00:00:00 2001 From: Sebastian Ehlert <28669218+awvwgk@users.noreply.github.com> Date: Tue, 2 Nov 2021 16:21:31 +0100 Subject: Add workflow for continuous delivery (#569) --- .github/workflows/CI.yml | 33 ++++++++++++++++++++++++++++++--- .github/workflows/release.yml | 33 ++++++++++++++++++++++++++++++--- README.md | 7 +++++-- 3 files changed, 65 insertions(+), 8 deletions(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index b2d5aef..bc36835 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -167,17 +167,38 @@ jobs: path: ${{ env.FPM_RELEASE }} upload-artifacts: - if: github.event_name == 'release' + if: ${{ github.event_name == 'release' && contains(github.ref, 'v') || github.event_name == 'push' }} runs-on: ubuntu-latest needs: - build steps: + - id: deploy-on-push + if: ${{ github.event_name == 'push' }} + run: + echo "::set-output name=result::${{ env.DEPLOY_BRANCH }}" + env: + DEPLOY_BRANCH: ${{ secrets.DEPLOY_BRANCH && contains(github.ref, secrets.DEPLOY_BRANCH) && 1 || 0 }} + + - uses: actions/checkout@v2 + if: ${{ github.event_name == 'push' }} + - name: Download Artifacts uses: actions/download-artifact@v2 with: path: ${{ github.workspace }} # This will download all files + - name: Normalize file names for continuous delivery + if: ${{ github.event_name == 'push' }} + run: | + for output in fpm-*/fpm-*; do + pushd $(dirname "$output") + mv -v $(basename $output) $(basename $output | sed -E '${{ env.replace }}') + popd + done + env: + replace: 's/-([0-9]+\.[0-9]+\.[0-9]+-[0-9]+-g)?[0-9a-f]+//' + - name: Create SHA256 checksums run: | for output in fpm-*/fpm-*; do @@ -186,12 +207,18 @@ jobs: popd done + - name: Move/Create continuous tag + if: ${{ github.event_name == 'push' && steps.deploy-on-push.outputs.result != 0 }} + run: | + git tag --force 'current' ${{ github.sha }} + git push --tags --force + - name: Upload assets - if: github.event_name == 'release' uses: svenstaro/upload-release-action@v2 + if: ${{ github.event_name == 'release' || steps.deploy-on-push.outputs.result != 0 }} with: repo_token: ${{ secrets.GITHUB_TOKEN }} file: fpm-*/fpm-* file_glob: true - tag: ${{ github.ref }} + tag: ${{ github.event_name == 'release' && github.ref || 'current'}} overwrite: true diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index a3c5259..37df665 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -98,18 +98,39 @@ jobs: path: ${{ env.OUTPUT }} upload-artifacts: - if: github.event_name == 'release' + if: ${{ github.event_name == 'release' && contains(github.ref, 'v') || github.event_name == 'push' }} runs-on: ubuntu-latest needs: - source-archive - source-single-file steps: + - id: deploy-on-push + if: ${{ github.event_name == 'push' }} + run: + echo "::set-output name=result::${{ env.DEPLOY_BRANCH }}" + env: + DEPLOY_BRANCH: ${{ secrets.DEPLOY_BRANCH && contains(github.ref, secrets.DEPLOY_BRANCH) && 1 || 0 }} + + - uses: actions/checkout@v2 + if: ${{ github.event_name == 'push' }} + - name: Download Artifacts uses: actions/download-artifact@v2 with: path: ${{ github.workspace }} # This will download all files + - name: Normalize file names for continuous delivery + if: ${{ github.event_name == 'push' }} + run: | + for output in fpm-*/fpm-*; do + pushd $(dirname "$output") + mv -v $(basename $output) $(basename $output | sed -E '${{ env.replace }}') + popd + done + env: + replace: 's/-([0-9]+\.[0-9]+\.[0-9]+-[0-9]+-g)?[0-9a-f]+//' + - name: Create SHA256 checksums run: | for output in fpm-*/fpm-*; do @@ -118,12 +139,18 @@ jobs: popd done + - name: Move/Create continuous tag + if: ${{ github.event_name == 'push' && steps.deploy-on-push.outputs.result != 0 }} + run: | + git tag --force 'current' ${{ github.sha }} + git push --tags --force + - name: Upload assets - if: ${{ github.event_name == 'release' }} + if: ${{ github.event_name == 'release' || steps.deploy-on-push.outputs.result != 0 }} uses: svenstaro/upload-release-action@v2 with: repo_token: ${{ secrets.GITHUB_TOKEN }} file: fpm-*/fpm-* file_glob: true - tag: ${{ github.ref }} + tag: ${{ github.event_name == 'release' && github.ref || 'current'}} overwrite: true diff --git a/README.md b/README.md index 0613b3d..72be678 100644 --- a/README.md +++ b/README.md @@ -32,12 +32,15 @@ non-Fortran related package manager. ### Setting up fpm #### Binary download -`x86-64` binaries are available [to download](https://github.com/fortran-lang/fpm/releases) for Windows, MacOS and Linux. + +Binaries for the latest stable release are available [to download](https://github.com/fortran-lang/fpm/releases/latest) for Windows, MacOS, and Linux. __Note:__ On Linux and MacOS, you will need to enable executable permission before you can use the binary. _e.g._ `$ chmod u+x fpm-0.4.0-linux-x86_64` +The binaries at the [current tag](https://github.com/fortran-lang/fpm/releases/tag/current) are updated automatically to always provide the current git version from the default branch. + #### [Conda] @@ -147,7 +150,7 @@ To build manually using the single source distribution, run the following code ( ``` mkdir _tmp -curl -LJ https://github.com/fortran-lang/fpm/releases/download/v0.4.0/fpm-0.4.0.F90 > _tmp/fpm.F90 +curl -LJ https://github.com/fortran-lang/fpm/releases/download/current/fpm.F90 > _tmp/fpm.F90 gfortran -J _tmp _tmp/fpm.F90 -o _tmp/fpm _tmp/fpm install --flag "-g -fbacktrace -O3" rm -r _tmp -- cgit v1.2.3