From 1d5a22f5d76e7fcf5bf05f9e2b39a3bdcd669c1e Mon Sep 17 00:00:00 2001 From: Allen Byrne <50328838+byrnHDF@users.noreply.github.com> Date: Wed, 12 Jul 2023 15:04:26 -0500 Subject: merge bbrelease to release (#3232) * merge bbrelease to release * Fix pre-req workflow --- .github/workflows/release.yml | 85 ++++++++--- bin/bbrelease | 336 ------------------------------------------ bin/release | 55 ++++--- 3 files changed, 101 insertions(+), 375 deletions(-) delete mode 100755 bin/bbrelease diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 3f9260e..0348c92 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -9,14 +9,6 @@ on: type: string required: false default: snapshot - use_environ: - description: 'Environment to locate files' - type: choice - required: true - default: snapshots - options: - - snapshots - - release permissions: contents: read @@ -29,35 +21,84 @@ jobs: steps: - run: | echo "Tag: $TAG" - echo "Environment: $ENVIRONMENT" env: - TAG: ${{ inputs.tag }} - ENVIRONMENT: ${{ inputs.environment }} + TAG: ${{ inputs.use_tag }} - call-workflow-tarball: + - name: "Determine tag" + if: "${{ github.event_name }} == 'push' && ${{ github.ref_type }} == 'tag'" + run: | + "echo \"RELEASE_TAG=${GITHUB_REF#refs/tags/}\" >> $GITHUB_ENV" + "echo \"RELEASE_SHA=$(git rev-parse --short \"$GITHUB_SHA\")\" >> $GITHUB_ENV" + shell: "bash" + +# tarball.yml will be used for releases when pre-tag actions are implemented +# call-workflow-tarball: +# needs: log-the-inputs +# uses: ./.github/workflows/tarball.yml +# with: +# use_tag: ${{ inputs.use_tag }} +# use_environ: release + + create-files-ctest: needs: log-the-inputs - uses: ./.github/workflows/tarball.yml - with: - use_tag: ${{ inputs.use_tag }} - use_environ: ${{ inputs.use_environ }} + runs-on: ubuntu-latest + steps: + - name: Set file base name + id: set-file-base + run: | + FILE_NAME_BASE=$(echo "${{ needs.log-the-inputs.outputs.TAG }}") + echo "FILE_BASE=$FILE_NAME_BASE" >> $GITHUB_OUTPUT + shell: bash + + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - name: Get Sources + uses: actions/checkout@v3 + with: + path: ${{ steps.set-file-base.outputs.FILE_BASE }} + + - name: Zip Folder + run: | + zip -r ${{ steps.get-file-base.outputs.FILE_BASE }}.zip ./${{ steps.get-file-base.outputs.FILE_BASE }} + tar -zcvf ${{ steps.get-file-base.outputs.FILE_BASE }}.tag.gz ./${{ steps.get-file-base.outputs.FILE_BASE }} + + - name: List files in the repository + run: | + ls -l ${{ github.workspace }} + ls $GITHUB_WORKSPACE + + # Save files created by release script + - name: Save tgz-tarball + uses: actions/upload-artifact@v3 + with: + name: tgz-tarball + path: ${{ steps.set-file-base.outputs.FILE_BASE }}.tar.gz + if-no-files-found: error # 'warn' or 'ignore' are also available, defaults to `warn` + + - name: Save zip-tarball + uses: actions/upload-artifact@v3 + with: + name: zip-tarball + path: ${{ steps.set-file-base.outputs.FILE_BASE }}.zip + if-no-files-found: error # 'warn' or 'ignore' are also available, defaults to `warn` call-workflow-ctest: - needs: call-workflow-tarball + needs: create-files-ctest uses: ./.github/workflows/cmake-ctest.yml with: - file_base: ${{ needs.call-workflow-tarball.outputs.file_base }} + file_base: ${{ needs.create-files-ctest.outputs.file_base }} use_tag: ${{ inputs.use_tag }} use_environ: ${{ inputs.use_environ }} call-workflow-release: - needs: [call-workflow-tarball, call-workflow-ctest] + #needs: [call-workflow-tarball, call-workflow-ctest] + needs: [log-the-inputs, call-workflow-ctest] permissions: contents: write # In order to allow tag creation uses: ./.github/workflows/release-files.yml with: - file_base: ${{ needs.call-workflow-tarball.outputs.file_base }} - file_branch: ${{ needs.call-workflow-tarball.outputs.file_branch }} - file_sha: ${{ needs.call-workflow-tarball.outputs.file_sha }} + file_base: ${{ needs.create-files-ctest.outputs.file_base }} + file_branch: ${{ needs.log-the-inputs.outputs.TAG }} + file_sha: ${{ needs.log-the-inputs.outputs.RELEASE_SHA }} use_tag: ${{ inputs.use_tag }} use_environ: ${{ inputs.use_environ }} diff --git a/bin/bbrelease b/bin/bbrelease deleted file mode 100755 index 48253e0..0000000 --- a/bin/bbrelease +++ /dev/null @@ -1,336 +0,0 @@ -#!/bin/sh -# -# Copyright by The HDF Group. -# All rights reserved. -# -# This file is part of HDF5. The full HDF5 copyright notice, including -# terms governing use, modification, and redistribution, is contained in -# the COPYING file, which can be found at the root of the source code -# distribution tree, or in https://www.hdfgroup.org/licenses. -# If you do not have access to either file, you may request a copy from -# help@hdfgroup.org. -# - -# Make a release of hdf5. -# -# NOTE: -# This script differs from bin/release in that this has an added -# --revision option to create private releases with the code revision -# hash in the version strings. -# -# This script can probably be merged into the original release script in -# the future. - -# Function definitions -# -# Print Usage page -USAGE() -{ -cat << EOF -Usage: $0 -d [-h] [--private] [--revision [--branch BRANCHNAME]] ... - -d DIR The name of the directory where the release(s) should be - placed. - --branch BRANCHNAME This is to get the correct version of the branch name from the - repository. BRANCHNAME for v1.8 should be hdf5_1_8. - -h print the help page. - --private Make a private release with today's date in version information. - --revision Make a private release with the code revision number in version information. - -This must be run at the top level of the source directory. -The other command-line options are the names of the programs to use -for compressing the resulting tar archive (if none are given then -"tar" is assumed): - - tar -- use tar and don't do any compressing. - gzip -- use gzip with "-9" and append ".gz" to the output name. - bzip2 -- use bzip2 with "-9" and append ".bz2" to the output name. - zip -- convert all text files to DOS style and form a zip file for Windows use. - -An md5 checksum is produced for each archive created and stored in the md5 file. - -Examples: - - $ bin/release -d /tmp - /tmp/hdf5-1.8.13-RELEASE.txt - /tmp/hdf5-1.8.13.md5 - /tmp/hdf5-1.8.13.tar - - $ bin/release -d /tmp gzip - /tmp/hdf5-1.8.13-RELEASE.txt - /tmp/hdf5-1.8.13.md5 - /tmp/hdf5-1.8.13.tar.gz - - $ bin/release -d /tmp tar gzip zip - /tmp/hdf5-1.8.13-RELEASE.txt - /tmp/hdf5-1.8.13.md5 - /tmp/hdf5-1.8.13.tar - /tmp/hdf5-1.8.13.tar.gz - /tmp/hdf5-1.8.13.tar.zip - -EOF - -} - -# Function name: tar2zip -# Convert the release tarball to a Windows zipball. -# -# Steps: -# 1. untar the tarball in a temporary directory; -# Note: do this in a temporary directory to avoid changing -# the original source directory which may be around. -# 2. convert all its text files to DOS (LF-CR) style; -# 3. form a zip file which is usable by Windows users. -# -# Parameters: -# $1 version -# $2 release tarball -# $3 output zipball file name -# -# Returns 0 if successful; 1 otherwise -# -tar2zip() -{ - if [ $# -ne 3 ]; then - echo "usage: tar2zip " - return 1 - fi - ztmpdir=/tmp/tmpdir$$ - mkdir -p $ztmpdir - version=$1 - tarfile=$2 - zipfile=$3 - - # step 1: untar tarball in ztmpdir - (cd $ztmpdir; tar xf -) < $tarfile - # sanity check - if [ ! -d $ztmpdir/$version ]; then - echo "untar did not create $ztmpdir/$version source dir" - # cleanup - rm -rf $ztmpdir - return 1 - fi - # step 2: convert text files - # There maybe a simpler way to do this. - # options used in unix2dos: - # -k Keep the date stamp - # -q quiet mode - # grep redirect output to /dev/null because -q or -s are not portable. - find $ztmpdir/$version | \ - while read inf; do \ - if file $inf | grep "$inf\: .*text" > /dev/null 2>&1 ; then \ - unix2dos -q -k $inf; \ - fi\ - done - # step 3: make zipball - # -9 maximum compression - # -y Store symbolic links as such in the zip archive - # -r recursive - # -q quiet - (cd $ztmpdir; zip -9 -y -r -q $version.zip $version) - mv $ztmpdir/$version.zip $zipfile - - # cleanup - rm -rf $ztmpdir -} - -# This command must be run at the top level of the hdf5 source directory. -# Verify this requirement. -if [ ! \( -f configure.ac -a -f bin/bbrelease \) ]; then - echo "$0 must be run at the top level of the hdf5 source directory" - exit 1 -fi - -# Defaults -DEST=releases -VERS=`perl bin/h5vers` -VERS_OLD= -test "$VERS" || exit 1 -verbose=yes -release_date=`date +%F` -today=`date +%Y%m%d` -pmode='no' -revmode='no' -tmpdir="../#release_tmp.$$" # tmp work directory -CPPLUS_RM_NAME=cpplus_RM - -# Restore previous Version information -RESTORE_VERSION() -{ - if [ X-${VERS_OLD} != X- ]; then - echo restoring version information back to $VERS_OLD - rm -f config/lt_vers.am - cp $tmpdir/lt_vers.am config/lt_vers.am - bin/h5vers -s $VERS_OLD - VERS_OLD= - fi -} - - -# Command-line arguments -while [ -n "$1" ]; do - arg=$1 - shift - case "$arg" in - -d) - DEST=$1 - shift - ;; - -h) - USAGE - exit 0 - ;; - --private) - pmode=yes - ;; - --revision) - revmode=yes - ;; - --branch) - BRANCHNAME=$1 - shift - ;; - -*) - echo "Unknown switch: $arg" 1>&2 - USAGE - exit 1 - ;; - *) - methods="$methods $arg" - ;; - esac -done - -# Default method is tar -if [ "X$methods" = "X" ]; then - methods="tar" -fi - -# Create the temporary work directory. -if mkdir $tmpdir; then - echo "temporary work directory for release. "\ - "Can be deleted after release completes." > $tmpdir/README -else - echo "Failed to mkdir tmpdir($tmpdir)" - exit 1 -fi - -# setup restoration in case of abort. -trap RESTORE_VERSION 0 - -if [ X$pmode = Xyes ]; then - VERS_OLD=$VERS - # Copy old version of config/lt_vers.am, since it's hard to - # "undo" changes to it. - cp config/lt_vers.am $tmpdir - # Set version information to m.n.r-of$today. - # (h5vers does not correctly handle just m.n.r-$today.) - VERS=`echo $VERS | sed -e s/-.*//`-of$today - echo Private release of $VERS - bin/h5vers -s $VERS -fi - -if [ X$revmode = Xyes ]; then - VERS_OLD=$VERS - echo "Save old version $VERS_OLD for restoration later." - # Copy old version of config/lt_vers.am, since it's hard to - # "undo" changes to it. - cp config/lt_vers.am $tmpdir - if [ "${BRANCHNAME}" = "" ]; then - BRANCHNAME=`git symbolic-ref -q --short HEAD` - fi - revision=`git rev-parse --short HEAD` - # Set version information to m.n.r-r$revision. - # (h5vers does not correctly handle just m.n.r-$today.) - VERS=`echo $VERS | sed -e s/-.*//`-$revision - echo Private release of $VERS - HDF5_VERS=hdf5-$BRANCHNAME-$revision - echo file base of $HDF5_VERS - bin/h5vers -s $VERS - # use a generic directory name for revision releases - HDF5_IN_VERS=hdfsrc -else - # Store hdf5-$VERS ("hdf5-1.7.51", e.g.) to a variable to avoid typos - HDF5_VERS=hdf5-$VERS - # directory name matches tar file name for non-revision releases - HDF5_IN_VERS=$HDF5_VERS -fi - -test "$verbose" && echo "Releasing $HDF5_VERS to $DEST" 1>&2 -if [ ! -d $DEST ]; then - echo " Destination directory $DEST does not exist" 1>&2 - exit 1 -fi - -# Create a symlink to the source so files in the tarball have the prefix -# we want (gnu's --transform isn't portable) -ln -s `pwd` $tmpdir/$HDF5_IN_VERS || exit 1 - -# Save a backup copy of Makefile if exists. -test -f Makefile && mv Makefile $tmpdir/Makefile.x -cp -p Makefile.dist Makefile - -# Update README.md and release_docs/RELEASE.txt with release information in -# line 1. -for f in README.md release_docs/RELEASE.txt; do - echo "HDF5 version $VERS released on $release_date" >$f.x - sed -e 1d $f >>$f.x - mv $f.x $f - # Make sure new files are of the right access mode - chmod 644 $f -done - -# Create the tar file -test "$verbose" && echo " Running tar..." 1>&2 -(cd "$tmpdir" && exec tar -ch --exclude-vcs -f "$HDF5_VERS.tar" "./$HDF5_IN_VERS" || exit 1 ) - -# Compress -MD5file=$HDF5_VERS.md5 -cp /dev/null $DEST/$MD5file -for comp in $methods; do - case $comp in - tar) - cp -p $tmpdir/$HDF5_VERS.tar $DEST/$HDF5_VERS.tar - (cd $DEST; md5sum $HDF5_VERS.tar >> $MD5file) - ;; - gzip) - test "$verbose" && echo " Running gzip..." 1>&2 - gzip -9 <$tmpdir/$HDF5_VERS.tar >$DEST/$HDF5_VERS.tar.gz - (cd $DEST; md5sum $HDF5_VERS.tar.gz >> $MD5file) - ;; - bzip2) - test "$verbose" && echo " Running bzip2..." 1>&2 - bzip2 -9 <$tmpdir/$HDF5_VERS.tar >$DEST/$HDF5_VERS.tar.bz2 - (cd $DEST; md5sum $HDF5_VERS.tar.bz2 >> $MD5file) - ;; - zip) - test "$verbose" && echo " Creating zip ball..." 1>&2 - tar2zip $HDF5_IN_VERS $tmpdir/$HDF5_VERS.tar $DEST/$HDF5_VERS.zip 1>&2 - (cd $DEST; md5sum $HDF5_VERS.zip >> $MD5file) - ;; - *) - echo "***Error*** Unknown method $comp" - exit 1 - ;; - esac -done - -# Copy the RELEASE.txt to the release area. -cp release_docs/RELEASE.txt $DEST/$HDF5_VERS-RELEASE.txt - -# Remove distributed Makefile and restore previous Makefile if existed. -rm -f Makefile -test -f $tmpdir/Makefile.x && mv $tmpdir/Makefile.x Makefile - -# Restore OLD version information, then no need for trap. -if [ X$pmode = Xyes ] || [ X$revmode = Xyes ]; then - echo "Restore the original version $VERS_OLD" - RESTORE_VERSION - trap 0 -fi - -# Remove temporary things -rm -rf $tmpdir - -echo "DONE" - -exit 0 diff --git a/bin/release b/bin/release index 31181f9..b84bbff 100755 --- a/bin/release +++ b/bin/release @@ -19,14 +19,14 @@ USAGE() { cat << EOF -Usage: $0 -d [--docver BRANCHNAME] [-h] [--private] ... +Usage: $0 -d [-h] [--private] [--revision [--branch BRANCHNAME]] ... -d DIR The name of the directory where the release(s) should be placed. - --docver BRANCHNAME This is added for 1.8 and beyond to get the correct - version of documentation files from the hdf5docs + --branch BRANCHNAME This is to get the correct version of the branch name from the repository. BRANCHNAME for v1.8 should be hdf5_1_8. -h print the help page. --private Make a private release with today's date in version information. + --revision Make a private release with the code revision number in version information. This must be run at the top level of the source directory. The other command-line options are the names of the programs to use @@ -407,8 +407,8 @@ verbose=yes release_date=`date +%F` today=`date +%Y%m%d` pmode='no' +revmode='no' tmpdir="../#release_tmp.$$" # tmp work directory -DOC_URL=https://git@bitbucket.hdfgroup.org/scm/hdffv/hdf5doc.git CPPLUS_RM_NAME=cpplus_RM MAINT_MODE_ENABLED="" @@ -449,8 +449,11 @@ while [ -n "$1" ]; do --private) pmode=yes ;; - --docver) - DOCVERSION=$1 + --revision) + revmode=yes + ;; + --branch) + BRANCHNAME=$1 shift ;; -*) @@ -490,12 +493,34 @@ if [ X$pmode = Xyes ]; then # (h5vers does not correctly handle just m.n.r-$today.) VERS=`echo $VERS | sed -e s/-.*//`-of$today echo Private release of $VERS -else bin/h5vers -s $VERS fi -# Store hdf5-$VERS ("hdf5-1.7.51", e.g.) to a variable to avoid typos -HDF5_VERS=hdf5-$VERS +if [ X$revmode = Xyes ]; then + VERS_OLD=$VERS + echo "Save old version $VERS_OLD for restoration later." + # Copy old version of config/lt_vers.am, since it's hard to + # "undo" changes to it. + cp config/lt_vers.am $tmpdir + if [ "${BRANCHNAME}" = "" ]; then + BRANCHNAME=`git symbolic-ref -q --short HEAD` + fi + revision=`git rev-parse --short HEAD` + # Set version information to m.n.r-r$revision. + # (h5vers does not correctly handle just m.n.r-$today.) + VERS=`echo $VERS | sed -e s/-.*//`-$revision + echo Private release of $VERS + HDF5_VERS=hdf5-$BRANCHNAME-$revision + echo file base of $HDF5_VERS + bin/h5vers -s $VERS + # use a generic directory name for revision releases + HDF5_IN_VERS=hdfsrc +else + # Store hdf5-$VERS ("hdf5-1.7.51", e.g.) to a variable to avoid typos + HDF5_VERS=hdf5-$VERS + # directory name matches tar file name for non-revision releases + HDF5_IN_VERS=$HDF5_VERS +fi test "$verbose" && echo "Releasing $HDF5_VERS to $DEST" 1>&2 if [ ! -d $DEST ]; then @@ -505,7 +530,7 @@ fi # Create a symlink to the source so files in the tarball have the prefix # we want (gnu's --transform isn't portable) -ln -s `pwd` $tmpdir/$HDF5_VERS || exit 1 +ln -s `pwd` $tmpdir/$HDF5_IN_VERS || exit 1 # Save a backup copy of Makefile if exists. test -f Makefile && mv Makefile $tmpdir/Makefile.x @@ -521,14 +546,9 @@ for f in README.md release_docs/RELEASE.txt; do chmod 644 $f done -# develop is different than branches. -if [ "${DOCVERSION}" ]; then - DOC_URL="$DOC_URL -b ${DOCVERSION}" -fi - # Create the tar file test "$verbose" && echo " Running tar..." 1>&2 -(cd "$tmpdir" && exec tar -ch --exclude-vcs -f "$HDF5_VERS.tar" "./$HDF5_VERS" || exit 1 ) +(cd "$tmpdir" && exec tar -ch --exclude-vcs -f "$HDF5_VERS.tar" "./$HDF5_IN_VERS" || exit 1 ) # Compress SHA256=$HDF5_VERS.sha256 @@ -607,7 +627,8 @@ rm -f Makefile test -f $tmpdir/Makefile.x && mv $tmpdir/Makefile.x Makefile # Restore OLD version information, then no need for trap. -if [ X$pmode = Xyes ]; then +if [ X$pmode = Xyes ] || [ X$revmode = Xyes ]; then + echo "Restore the original version $VERS_OLD" RESTORE_VERSION trap 0 fi -- cgit v0.12