Skip to content

Release workflow run #322

Release workflow run

Release workflow run #322

name: Release workflow run
on:
push:
branches: [ 'feature/automated_release' ]
# branches: [ 'master', 'main', 'develop', 'feature/automated_release' ]
# tags: [ 'v*' ]
# pull_request:
# branches: [ 'master', 'main', 'develop' ]
schedule:
- cron: '0 2 * * *' # daily
workflow_dispatch:
inputs:
branch:
description: 'Branch or tag to retrieve the binaries from'
required: false
default: 'master'
jobs:
# release_job:
# uses: ./.github/workflows/release_binaries.yml
# with:
# branch: master
# target: nightly
# get_latest_tag:
# runs-on: ubuntu-latest
# outputs:
# tag: ${{ fromJson(steps.get_latest_release.outputs.data).tag_name }}
# steps:
# - uses: octokit/request-action@v2.x
# id: get_latest_release
# with:
# route: GET /repos/{owner}/{repo}/releases/latest
# owner: coolprop
# repo: coolprop
# env:
# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# - run: "echo latest release id: ${{ fromJson(steps.get_latest_release.outputs.data).id }}"
# - run: "echo latest release tag: ${{ fromJson(steps.get_latest_release.outputs.data).tag_name }}"
set_vars:
runs-on: ubuntu-latest
outputs:
branch: ${{ steps.propagate_vars.outputs.branch }}
target: ${{ steps.propagate_vars.outputs.target }}
webdir: ${{ steps.propagate_vars.outputs.webdir }}
steps:
# Start with the branch or tag for the source code
- run: echo "BRANCH=${{ (inputs.branch == '' && 'master') || inputs.branch }}" >> $GITHUB_ENV
# Try to parse the branch as a version number
- run: |
set +e
echo "TARGET=$(echo ${{ env.BRANCH }} | grep -Eo '[0-9]+(\.[0-9]+)*')" >> $GITHUB_ENV
# Check whether we could parse it or not, use branch or nightly otherwise
- if: "${{ env.TARGET == '' }}"
run: echo "TARGET=${{ (env.BRANCH == 'master' && 'nightly') || env.BRANCH }}" >> $GITHUB_ENV
- run: echo "WEBDIR=${{ (env.TARGET == 'nightly' && 'dev') || '.' }}" >> $GITHUB_ENV
- id: propagate_vars
run: |
echo "branch=${{ env.BRANCH }}" >> $GITHUB_OUTPUT
echo "target=${{ env.TARGET }}" >> $GITHUB_OUTPUT
echo "webdir=${{ env.WEBDIR }}" >> $GITHUB_OUTPUT
collect_binaries:
needs: [set_vars]
strategy:
fail-fast: false
matrix:
os: [ubuntu]
workflow: [javascript_builder.yml, library_shared.yml, windows_installer.yml, docs_docker-run.yml, libreoffice_builder.yml] # , mathcad_builder.yml, python_buildwheels.yml]
uses: ./.github/workflows/release_get_artifact.yml
with:
branch: ${{ needs.set_vars.outputs.branch }}
workflow: ${{ matrix.workflow }}
prepare_mathcad:
needs: [set_vars]
# Call the mathcad_builder workflow here direclty
# Doesn't work through the matrix calls to release_get_artifact above and no output results for troubleshooting.
uses: ./.github/workflows/mathcad_builder.yml
# Stores artifact under binaries-MathcadPrime consistent with the other builds
secrets: inherit
prepare_sources:
needs: [set_vars]
name: Prepare the source code
runs-on: ubuntu-latest
steps:
- name: Fetch the sources
uses: actions/checkout@v4
with:
ref: ${{ needs.set_vars.outputs.branch }}
submodules: 'recursive'
path: source
- name: Update the headers
run: |
pushd source
git reset --hard HEAD
python "dev/generate_headers.py"
find . -iwholename "*/.git*" -prune -exec rm -rf {} \;
popd
zip -rq CoolProp_sources.zip source
mkdir -p binaries/source
mv CoolProp_sources.zip binaries/source/
- name: Store artifacts
uses: actions/upload-artifact@v4
with:
name: binaries-source
path: binaries
retention-days: 1
deploy_files:
needs: [set_vars, collect_binaries, prepare_mathcad, prepare_sources]
name: Deploy collected files
runs-on: ubuntu-latest
steps:
- name: Download binaries
uses: actions/download-artifact@v4
with:
# Get all unique artifacts starting with "binaries-" per the pattern
# per requirements of actions/download-artifact@v4
pattern: binaries-*
# Allow multiple artifacts matching the patter to be merged
# into the same binaries directory.
merge-multiple: true
path: binaries
- name: Create info files
run: |
echo "CoolProp ${{ needs.set_vars.outputs.target }} binaries" > binaries/README.rst.txt
echo "-------------------------" >> binaries/README.rst.txt
echo -n "Binaries of the \`CoolProp project <http://coolprop.sourceforge.net>\`_ " >> binaries/README.rst.txt
echo "updated on $(date +%F) at $(date +%X) $(date +%Z)." >> binaries/README.rst.txt
cat binaries/README.rst.txt
mkdir -p binaries/Python
echo "Please use the following commands to install CoolProp for Python:" > binaries/Python/README.txt
echo "nightly: python -m pip install -i https://test.pypi.org/simple/ CoolProp" >> binaries/Python/README.txt
echo "release: python -m pip install --upgrade CoolProp" >> binaries/Python/README.txt
cat binaries/Python/README.txt
- name: Display structure of downloaded files
run: |
set -x
ls -R
du -sh
- name: Install SSH key
uses: shimataro/ssh-key-action@v2
with:
key: ${{ secrets.SF_SSH_KEY }}
name: id_rsa-${{ secrets.SF_SSH_USER }}
known_hosts: ${{ secrets.SF_HOST_KEYS }}
config: |
Host frs.sf.net-${{ secrets.SF_SSH_USER }}
HostName frs.sf.net
User ${{ secrets.SF_SSH_USER }}
IdentityFile ~/.ssh/id_rsa-${{ secrets.SF_SSH_USER }}
PubkeyAcceptedKeyTypes +ssh-rsa
if_key_exists: fail # replace / ignore / fail; optional (defaults to fail)
- name: Fix the docs
run: |
rm -rf binaries/github-pages
tar -xzf binaries/docs/*documentation*.tar.gz
mkdir -p html/v4
rsync frs.sf.net-${{ secrets.SF_SSH_USER }}:/home/frs/project/coolprop/CoolProp/4.2.5/coolpropv425docs.zip coolpropv4docs.zip
unzip -qo coolpropv4docs.zip -d html/v4
zip -rq documentation.zip html
rm -rf binaries/docs/*
mv documentation.zip binaries/docs/
- name: Upload using rsync over SSH
run: |
RSYNC_DRY_RUN=
RSYNC_OPTS="-a --chmod=Dug=rwx,Do=rx,Fug=rw,Fo=r -z --stats --delete"
rsync $RSYNC_DRY_RUN $RSYNC_OPTS "binaries/" frs.sf.net-${{ secrets.SF_SSH_USER }}:/home/frs/project/coolprop/CoolProp/${{ needs.set_vars.outputs.target }}
rsync $RSYNC_DRY_RUN $RSYNC_OPTS "html/" frs.sf.net-${{ secrets.SF_SSH_USER }}:/home/project-web/coolprop/htdocs/${{ needs.set_vars.outputs.webdir }}