Skip to content

cleanup

cleanup #144

Workflow file for this run

# Copyright (C) 2020-2024 CERN and UCLouvain.
# Licensed under the GNU Lesser General Public License (version 3 or later).
# Created by: A. Valassi (Sep 2024) for the MG5aMC CUDACPP plugin.
# Further modified by: A. Valassi (2024) for the MG5aMC CUDACPP plugin.
#----------------------------------------------------------------------------------------------------------------------------------
name: Archiver
#----------------------------------------------------------------------------------------------------------------------------------
on:
push:
tags:
# Include version tags such as 'cudacpp_for3.6.0_v1.0.0' or 'cudacpp_for3.6.0_v1.0.0_test001'
# Include version tags such as 'valassi_cudacpp_for3.6.0_v1.0.0' or 'valassi_cudacpp_for3.6.0_v1.0.0_test001'
- '*cudacpp_for*_v*'
# Exclude running tags such as 'cudacpp_for3.6.0_latest'
# Exclude running tags such as 'valassi_cudacpp_for3.6.0_latest'
# See https://github.com/orgs/community/discussions/25114
- '!*cudacpp_for*_latest'
#----------------------------------------------------------------------------------------------------------------------------------
jobs:
archiver:
runs-on: ubuntu-latest
# TEMPORARY! this will change eventually...
if: |
( github.repository == 'madgraph5/madgraph4gpu' && startsWith( github.ref, 'refs/tags/cudacpp_for' ) )
|| ( github.repository == 'valassi/madgraph4gpu' && startsWith( github.ref, 'refs/tags/valassi_cudacpp_for' ) )
steps:
- name: checkout_PR
uses: actions/checkout@v4
with:
submodules: 'true'
path: branch_PR
- name: create_tarball_and_versiontxt
run: |
echo "Current directory is $(pwd)"
WORKDIR=$(pwd)
echo "WORKDIR=${WORKDIR}" >> $GITHUB_ENV
echo "WORKDIR is ${WORKDIR}"
cd branch_PR
echo "Current directory is now $(pwd)"
echo "Current branch is \"$(git branch | \grep ^* | sed 's/^* //')\""
.github/workflows/archiver.sh
mv cudacpp.tar.gz ${WORKDIR}
mv VERSION.txt ${WORKDIR}
- name: check_versiontag_and_update_versiontxt
run: |
echo "Current directory is $(pwd)"
echo "WORKDIR is ${WORKDIR}"
cd branch_PR
echo "Current directory is now $(pwd)"
echo "Current branch is \"$(git branch | \grep ^* | sed 's/^* //')\""
githubref=$${{ github.ref }}
echo "(From github.ref) githubref = ${githubref}"
tagname=${githubref#/tags/}
echo "(From github.ref) tagname = ${tagname}"
echo "TAGNAME=${tagname}" >> $GITHUB_ENV
REPOSITORY=$${{ github.repository }}
echo "(From github.repository) REPOSITORY = ${REPOSITORY}"
###REPOOWNER=${REPOSITORY%/*} # owner is empty??
REPONAME=${REPOSITORY#*/} # owner is empty??
echo "(From github.repository) REPONAME = ${REPONAME}"
tmpsuffix=${tagname#*cudacpp_for}
TAGPREFIX=${tagname/${tmpsuffix}} # determine TAGPREFIX from triggering tag because github.repository_owner is empty(???)
echo "(From tagname) TAGPREFIX = ${TAGPREFIX}"
REPOOWNER=${TAGPREFIX%cudacpp_for}
if [ "${REPOOWNER}" == "${TAGPREFIX}" ]; then
echo "INTERNAL ERROR! Invalid TAGPREFIX '${TAGPREFIX}'" # does not end in 'cudacpp_for'?
exit 1 # this causes the job to fail without running the next steps
elif [ "${REPOOWNER}" == "" ]; then
REPOOWNER=madgraph5 # TEMPORARY! Will change eventually...
elif [ "${REPOOWNER%_}" != "${REPOOWNER}" ]; then
REPOOWNER=${REPOOWNER%_}
else
echo "INTERNAL ERROR! Invalid REPOOWNER '${REPOOWNER}'" # empty or does not end in '-'?
exit 1 # this causes the job to fail without running the next steps
fi
echo "(From tagname) REPOOWNER = ${REPOOWNER}"
REPOSITORY=${REPOOWNER}/${REPONAME}
echo "(From tagname) REPOSITORY = ${REPOSITORY}"
echo "REPOSITORY=${REPOSITORY}" >> $GITHUB_ENV
# Check version tag
cudacpp_version=$(cat ${WORKDIR}/VERSION.txt | awk '/^cudacpp_version/{print $3}')
mg5_version=$(cat ${WORKDIR}/VERSION.txt | awk '/^mg5_version_current/{print $3}')
mg5_commit=$(cat ${WORKDIR}/VERSION.txt | awk '/^mg5_commit_current/{print $3}')
echo "(From VERSION.txt) cudacpp_version = ${cudacpp_version}"
echo "(From VERSION.txt) mg5_version_current = ${mg5_version}"
echo "(From VERSION.txt) mg5_commit_current = ${mg5_commit}"
tagname_version=${TAGPREFIX}${mg5_version}_v${cudacpp_version}
echo "(From VERSION.txt) supported tagname = ${tagname_version}[_...]"
if [ "${tagname/${tagname_version}}" == "${tagname}" ]; then
echo "ERROR! Invalid tagname '${tagname}' does not start with '${tagname_version}'"
exit 1 # this causes the job to fail without running the next steps
fi
tagname_suffix="${tagname/${tagname_version}}"
if [ `python3 -c "import re; print(re.match('(|_[0-9a-z]+)$','${tagname_suffix}') is not None)"` == "False" ]; then
echo "ERROR! Invalid tagname '${tagname}' (valid format is '${tagname_version}[_txt]' where txt only contains letters or digits)"
exit 1 # this causes the job to fail without running the next steps
fi
echo "OK! Tagname '${tagname}' respects the expected format"
tagname_latest=${TAGPREFIX}${mg5_version}_latest
echo "TAGNAME_LATEST=${tagname_latest}" >> $GITHUB_ENV
if [ "${tagname_suffix}" == "" ]; then
tagname_makelatest=true
echo "INFO: tagname ${tagname} is a release tag: will update running tag ${tagname_latest}"
else
tagname_makelatest=false
echo "INFO: tagname ${tagname} is a pre-release tag: will NOT update running tag ${tagname_latest}"
fi
echo "TAGNAME_MAKELATEST=${tagname_makelatest}" >> $GITHUB_ENV
dateformat='%Y-%m-%d_%H:%M:%S UTC'
tagdate=$(TZ=UTC git for-each-ref --format "Tag '${tagname}' created on %(taggerdate:format-local:${dateformat}) by %(taggername)" refs/tags/${tagname})
echo "TAGDATE=${tagdate}" >> $GITHUB_ENV
# Update VERSION.txt
echo "" >> ${WORKDIR}/VERSION.txt
echo "VERSION TAG: ${tagname}" >> ${WORKDIR}/VERSION.txt
echo "RUNNING TAG: ${tagname_latest}" >> ${WORKDIR}/VERSION.txt
# Release notes for the version tag
echo "Version tag ${tagname} ([changelog](https://github.com/${REPOSITORY}/blob/${tagname}/epochX/cudacpp/CODEGEN/PLUGIN/CUDACPP_SA_OUTPUT/CHANGELOG.md))" > ${WORKDIR}/versiontag.txt
echo "" >> ${WORKDIR}/versiontag.txt
echo "Validated for mg5amcnlo version ${mg5_version} (commit [${mg5_commit}](https://github.com/mg5amcnlo/mg5amcnlo/commit/${mg5_commit}))" >> ${WORKDIR}/versiontag.txt
echo "" >> ${WORKDIR}/versiontag.txt
echo "${tagdate}" >> ${WORKDIR}/versiontag.txt
echo "" >> ${WORKDIR}/versiontag.txt
echo "---" >> ${WORKDIR}/versiontag.txt
echo "" >> ${WORKDIR}/versiontag.txt
if [ "${tagname_makelatest}" != "true" ]; then
echo "This is a test or pre-release tag: to use it, you must install it directly as follows" >> ${WORKDIR}/versiontag.txt
else
echo "This is a release tag: you may install the *latest* release tag ${tagname_latest} as follows" >> ${WORKDIR}/versiontag.txt
echo "" >> ${WORKDIR}/versiontag.txt
echo "<sub>" >> ${WORKDIR}/versiontag.txt # hack to display smaller text in markdown
echo "MG5_aMC>install cudacpp" >> ${WORKDIR}/versiontag.txt
echo "</sub><br>" >> ${WORKDIR}/versiontag.txt # hack to display smaller text in markdown
echo "Alternatively, you may install directly this specific tag as follows" >> ${WORKDIR}/versiontag.txt
fi
echo "<sub>" >> ${WORKDIR}/versiontag.txt # hack to display smaller text in markdown
echo "MG5_aMC>install cudacpp --cudacpp_tarball=https://github.com/${REPOSITORY}/releases/download/${tagname}/cudacpp.tar.gz" >> ${WORKDIR}/versiontag.txt
echo "</sub>" >> ${WORKDIR}/versiontag.txt # hack to display smaller text in markdown
echo "" >> ${WORKDIR}/versiontag.txt
echo "---" >> ${WORKDIR}/versiontag.txt
echo "" >> ${WORKDIR}/versiontag.txt
cat ${WORKDIR}/VERSION.txt | egrep '^(commit|TARBALL) ' >> ${WORKDIR}/versiontag.txt
- name: delete_versiontag_releaseonly
# See https://cli.github.com/manual/gh_release_delete
# See https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/using-github-cli-in-workflows
run: |
echo "Current directory is $(pwd)"
cd branch_PR
echo "Current directory is now $(pwd)"
echo "Current branch is \"$(git branch | \grep ^* | sed 's/^* //')\""
echo "Retrieve release ${{ env.TAGNAME }}"
python3 -c 'print("-"*132)'
if gh release view ${{ env.TAGNAME }}; then
python3 -c 'print("-"*132)'
echo "Delete release ${{ env.TAGNAME }}"
gh release delete ${{ env.TAGNAME }} -y
else
python3 -c 'print("-"*132)'
echo "Release ${{ env.TAGNAME }} does not exist"
fi
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: delete_runningtag_releaseandtag
if: ${{ env.TAGNAME_MAKELATEST == 'true' }}
# See https://cli.github.com/manual/gh_release_delete
# See https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/using-github-cli-in-workflows
run: |
echo "Current directory is $(pwd)"
cd branch_PR
echo "Current directory is now $(pwd)"
echo "Current branch is \"$(git branch | \grep ^* | sed 's/^* //')\""
echo "Retrieve release ${{ env.TAGNAME_LATEST }}"
python3 -c 'print("-"*132)'
if gh release view ${{ env.TAGNAME_LATEST }}; then
python3 -c 'print("-"*132)'
echo "Delete release ${{ env.TAGNAME_LATEST }} and the associated tag"
gh release delete ${{ env.TAGNAME_LATEST }} -y --cleanup-tag
else
python3 -c 'print("-"*132)'
echo "Release ${{ env.TAGNAME_LATEST }} does not exist"
fi
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: create_runningtag
if: ${{ env.TAGNAME_MAKELATEST == 'true' }}
run: |
echo "Current directory is $(pwd)"
echo "WORKDIR is ${WORKDIR}"
cd branch_PR
echo "Current directory is now $(pwd)"
echo "Current branch is \"$(git branch | \grep ^* | sed 's/^* //')\""
tagname=${TAGNAME}
echo "(From GITHUB_ENV) tagname = ${tagname}"
tagname_latest=${TAGNAME_LATEST}
echo "(From GITHUB_ENV) tagname_latest = ${tagname_latest}"
commit=$(cat ${WORKDIR}/VERSION.txt | awk '/^commit/{print $2}')
echo "(From VERSION.txt) commit = ${commit}"
mg5_version=$(cat ${WORKDIR}/VERSION.txt | awk '/^mg5_version_current/{print $3}')
mg5_commit=$(cat ${WORKDIR}/VERSION.txt | awk '/^mg5_commit_current/{print $3}')
echo "(From VERSION.txt) mg5_version_current = ${mg5_version}"
echo "(From VERSION.txt) mg5_commit_current = ${mg5_commit}"
tagdate=${TAGDATE}
# Create running tag
git config user.name github-actions
git config user.email [email protected]
echo "INFO: create running tag ${tagname_latest}"
git tag -f ${tagname_latest} ${commit} -m "Running tag ${tagname_latest}"
git push -f --tags
# Release notes for the running tag
echo "Running tag ${tagname_latest} ([changelog](https://github.com/${REPOSITORY}/blob/${tagname_latest}/epochX/cudacpp/CODEGEN/PLUGIN/CUDACPP_SA_OUTPUT/CHANGELOG.md))" > ${WORKDIR}/runningtag.txt
echo "This is equivalent to version tag ${tagname}" >> ${WORKDIR}/runningtag.txt
echo "" >> ${WORKDIR}/runningtag.txt
echo "Validated for mg5amcnlo version ${mg5_version} (commit [${mg5_commit}](https://github.com/mg5amcnlo/mg5amcnlo/commit/${mg5_commit}))" >> ${WORKDIR}/runningtag.txt
echo "" >> ${WORKDIR}/runningtag.txt
echo "${tagdate}" >> ${WORKDIR}/runningtag.txt
echo "" >> ${WORKDIR}/runningtag.txt
echo "---" >> ${WORKDIR}/runningtag.txt
echo "" >> ${WORKDIR}/runningtag.txt
cat ${WORKDIR}/VERSION.txt | egrep '^(commit|TARBALL) ' >> ${WORKDIR}/runningtag.txt
- name: release_versiontag
# See https://github.com/softprops/action-gh-release
uses: softprops/action-gh-release@v2
with:
name: ${{ env.TAGNAME }}
prerelease: ${{ env.TAGNAME_MAKELATEST != 'true' }}
make_latest: ${{ env.TAGNAME_MAKELATEST }}
body_path: versiontag.txt
# Previous attempt to upload files from ${HOME}/VERSION.txt and ${HOME}/cudacpp.tar.gz failed
# The current implementation uploads files from the default ${WORKDIR} (without giving the explicit full path)
files: |
cudacpp.tar.gz
VERSION.txt
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: release_runningtag
if: ${{ env.TAGNAME_MAKELATEST == 'true' }}
# See https://github.com/softprops/action-gh-release
uses: softprops/action-gh-release@v2
with:
name: ${{ env.TAGNAME_LATEST }}
prerelease: ${{ env.TAGNAME_MAKELATEST != 'true' }}
make_latest: ${{ env.TAGNAME_MAKELATEST }}
tag_name: refs/tags/${{ env.TAGNAME_LATEST }}
body_path: runningtag.txt
# Previous attempt to upload files from ${HOME}/VERSION.txt and ${HOME}/cudacpp.tar.gz failed
# The current implementation uploads files from the default ${WORKDIR} (without giving the explicit full path)
files: |
cudacpp.tar.gz
VERSION.txt
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: create_infodat
if: ${{ env.TAGNAME_MAKELATEST == 'true' }}
run: |
echo "Current directory is $(pwd)"
echo "WORKDIR is ${WORKDIR}"
cd branch_PR
echo "Current directory is now $(pwd)"
echo "Current branch is \"$(git branch | \grep ^* | sed 's/^* //')\""
echo "(From GITHUB_ENV) REPOSITORY = ${REPOSITORY}"
python3 .github/workflows/archiver.py ${REPOSITORY} version_info.dat
mv version_info.dat ${WORKDIR}
echo "Created version_info.dat"
python3 -c 'print("-"*132)'
cat ${WORKDIR}/version_info.dat
- name: checkout_INFO
if: ${{ env.TAGNAME_MAKELATEST == 'true' }}
uses: actions/checkout@v4
with:
ref: INFO
path: branch_INFO
- name: commit_infodat
if: ${{ env.TAGNAME_MAKELATEST == 'true' }}
run: |
echo "Current directory is $(pwd)"
echo "WORKDIR is ${WORKDIR}"
cd branch_INFO
echo "Current directory is now $(pwd)"
echo "Current branch is \"$(git branch | \grep ^* | sed 's/^* //')\""
mv ${WORKDIR}/version_info.dat .
git config user.name github-actions
git config user.email [email protected]
if [ -z "$(git status --porcelain version_info.dat)" ]; then
echo "No changes detected in version_info.dat: nothing to commit"
else
echo "Commit and push version_info.dat"
echo "Update version_info.dat" > msg.txt
echo "" >> msg.txt
git diff version_info.dat | tail --lines=+6 >> msg.txt
git commit -F msg.txt version_info.dat
git push
fi
#----------------------------------------------------------------------------------------------------------------------------------