On Mon, Jan 15, 2018 at 11:12 AM, Aaron Armstrong Skomra <sko...@gmail.com>
wrote:
> Require at least 1 of Github/Sourceforge.
>
> Signed-off-by: Aaron Armstrong Skomra <sko...@gmail.com>
>
Reviewed-by: Ping Cheng <ping.ch...@wacom.com> for the set.
Let's get one step closer to github.
Ping
> ---
> Similar patches were applied to input-wacom in October. This
> revised patch addresses Peter's comments. I will revise input-wacom's
> release.sh when this series is accepted here.
>
> release.sh | 279 ++++++++++++++++++++++++++++++
> +++++++++++++------------------
> 1 file changed, 197 insertions(+), 82 deletions(-)
>
> diff --git a/release.sh b/release.sh
> index a5dff324cc9d..f6102206469c 100755
> --- a/release.sh
> +++ b/release.sh
> @@ -89,11 +89,160 @@ fi
> }
>
> #-----------------------------------------------------------
> -------------------
> +# Function: release_to_sourceforge
> +#----------------------------------------------------------
> --------------------
> +#
> +release_to_sourceforge () {
> +
> + # Some hostnames are also used as /srv subdirs
> + host_linuxwacom="shell.sourceforge.net"
> +
> + section_path=archive/individual/$section
> + srv_path="/srv/$host_current/$section_path"
> +
> + if [ x"$section" = xxf86-input-wacom ] ||
> + [ x"$section" = xinput-wacom ] ||
> + [ x"$section" = xlibwacom ]; then
> + # input-wacom files are in a subdirectory for whatever reason
> + if [ x"$section" = xinput-wacom ]; then
> + section="xf86-input-wacom/input-wacom"
> + fi
> +
> + hostname=$host_linuxwacom
> + host_current="sourceforge.net"
> + section_path="projects/linuxwacom/files/$section"
> + srv_path="/home/frs/project/linuxwacom/$section"
> +
> + echo "creating shell on sourceforge for $SF_USERNAME"
> + ssh ${SF_USERNAME%@},linuxwacom@$hostname create
> + #echo "Simply log out once you get to the prompt"
> + #ssh -t ${SF_USERNAME%@},linuxwacom@$hostname create
> + #echo "Sleeping for 30 seconds, because this sometimes helps
> against sourceforge's random authentication denials"
> + #sleep 30
> + fi
> +
> + # Use personal web space on the host for unit testing (leave
> commented out)
> + # srv_path="~/public_html$srv_path"
> +
> + # Check that the server path actually does exist
> + ssh $SF_USERNAME$hostname ls $srv_path >/dev/null 2>&1 ||
> + if [ $? -ne 0 ]; then
> + echo "Error: the path \"$srv_path\" on the web server does not
> exist."
> + cd $top_src
> + return 1
> + fi
> +
> + # Check for already existing tarballs
> + for tarball in $targz $tarbz2 $tarxz; do
> + ssh $SF_USERNAME$hostname ls $srv_path/$tarball >/dev/null 2>&1
> + if [ $? -eq 0 ]; then
> + if [ "x$FORCE" = "xyes" ]; then
> + echo "Warning: overwriting released tarballs due to
> --force option."
> + else
> + echo "Error: tarball $tar_name already exists. Use --force
> to overwrite."
> + cd $top_src
> + return 1
> + fi
> + fi
> + done
> +
> + # Upload to host using the 'scp' remote file copy program
> + if [ x"$DRY_RUN" = x ]; then
> + echo "Info: uploading tarballs to web server:"
> + scp $targz $tarbz2 $tarxz $siggz $sigbz2 $sigxz
> $SF_USERNAME$hostname:$srv_path
> + if [ $? -ne 0 ]; then
> + echo "Error: the tarballs uploading failed."
> + cd $top_src
> + return 1
> + fi
> + else
> + echo "Info: skipping tarballs uploading in dry-run mode."
> + echo " \"$srv_path\"."
> + fi
> +
> + host_current="sourceforge.net"
> + section_path="projects/linuxwacom/files/$section"
> + # DL_URL & PGP_URL will be overwritten by the Github download url if
> github was
> + # enabled on the command line
> + DL_URL="http://$host_current/$section_path/$tarbz2"
> + PGP_URL="http://$host_current/$section_path/$tarbz2.sig"
> +}
> +
> +#----------------------------------------------------------
> --------------------
> +# Function: check_json_message
> +#----------------------------------------------------------
> --------------------
> +#
> +# if we get json with a "message" from github there was an error
> +# $1 the JSON to parse
> +check_json_message() {
> +
> + message=`echo $1 | jq ".message"`
> + if [ "$message" != "null" ] ; then
> + echo "Github release error: $1"
> + exit 1
> + fi
> +}
> +
> +#----------------------------------------------------------
> --------------------
> +# Function: release_to_github
> +#----------------------------------------------------------
> --------------------
> +#
> +release_to_github() {
> + # Creating a release on Github automatically creates a tag.
> +
> + # dependency 'jq' for reading the json github sends us back
> +
> + # note git_username should include the suffix ":KEY" if the user has
> enabled 2FA
> + # example skomra:de0e4dc3efbf2d008053027708227b365b7f80bf
> +
> + GH_REPO="linuxwacom"
> + PROJECT="xf86-input-wacom"
> + release_description="Temporary Empty Release Description"
> + release_descr=$(jq -n --arg release_description
> "$release_description" '$release_description')
> +
> + # Create a Release
> + api_json=$(printf '{"tag_name": "%s",
> + "target_commitish": "master",
> + "name": "%s",
> + "body": %s,
> + "draft": false,
> + "prerelease": false}' "$tar_name" "$tar_name"
> "$release_descr")
> + create_result=`curl -s --data "$api_json" -u $GH_USERNAME
> https://api.github.com/repos/$GH_REPO/$PROJECT/releases`
> + GH_RELEASE_ID=`echo $create_result | jq '.id'`
> +
> + check_json_message "$create_result"
> +
> + # Upload the tar to the release
> + upload_result=`curl -s -u $GH_USERNAME \
> + -H "Content-Type: application/x-bzip" \
> + --data-binary @$tarbz2 \
> + "https://uploads.github.com/repos/$GH_REPO/$PROJECT/
> releases/$GH_RELEASE_ID/assets?name=$tarbz2"`
> + DL_URL=`echo $upload_result | jq -r '.browser_download_url'`
> +
> + check_json_message "$upload_result"
> +
> + # Upload the sig to the release
> + sig_result=`curl -s -u $GH_USERNAME \
> + -H "Content-Type: application/pgp-signature" \
> + --data-binary @$tarbz2.sig \
> + "https://uploads.github.com/repos/$GH_REPO/$PROJECT/
> releases/$GH_RELEASE_ID/assets?name=$tarbz2.sig"`
> + PGP_URL=`echo $sig_result | jq -r '.browser_download_url'`
> +
> + check_json_message "$sig_result"
> +
> + echo "Github release created"
> +}
> +
> +#----------------------------------------------------------
> --------------------
> # Function: generate_announce
> #-----------------------------------------------------------
> -------------------
> #
> generate_announce()
> {
> + MD5SUM=`which md5sum || which gmd5sum`
> + SHA1SUM=`which sha1sum || which gsha1sum`
> + SHA256SUM=`which sha256sum || which gsha256sum`
> +
> cat <<RELEASE
> Subject: [ANNOUNCE] $pkg_name $pkg_version
> To: $list_to
> @@ -105,16 +254,14 @@ git tag: $tag_name
>
> RELEASE
>
> - for tarball in $tarbz2 $targz $tarxz; do
> cat <<RELEASE
> -http://$host_current/$section_path/$tarball
> +$DL_URL
> MD5: `$MD5SUM $tarball`
> SHA1: `$SHA1SUM $tarball`
> SHA256: `$SHA256SUM $tarball`
> -PGP: http://${host_current}/${section_path}/${tarball}.sig
> +PGP: $PGP_URL
>
> RELEASE
> - done
> }
>
> #-----------------------------------------------------------
> -------------------
> @@ -221,7 +368,7 @@ get_section() {
> module_url=`echo $module_url | cut -d'/' -f3,4`
> else
> # The look for mesa, xcb, etc...
> - module_url=`echo "$full_module_url" | $GREP -o -e "/mesa/.*" -e
> "/xcb/.*" -e "/xkeyboard-config" -e "/nouveau/xf86-video-nouveau" -e
> "/libevdev" -e "/wayland/.*" -e "/evemu" -e "/linuxwacom/.*"`
> + module_url=`echo "$full_module_url" | $GREP -o -e "linuxwacom/.*"`
> if [ $? -eq 0 ]; then
> module_url=`echo $module_url | cut -d'/' -f2,3`
> else
> @@ -474,76 +621,6 @@ process_module() {
> fi
> fi
>
> - # --------- Now the tarballs are ready to upload ----------
> -
> - # Some hostnames are also used as /srv subdirs
> - host_linuxwacom="shell.sourceforge.net"
> -
> - section_path=archive/individual/$section
> - srv_path="/srv/$host_current/$section_path"
> -
> - if [ x"$section" = xxf86-input-wacom ] ||
> - [ x"$section" = xinput-wacom ] ||
> - [ x"$section" = xlibwacom ]; then
> - # input-wacom files are in a subdirectory for whatever reason
> - if [ x"$section" = xinput-wacom ]; then
> - section="xf86-input-wacom/input-wacom"
> - fi
> -
> - hostname=$host_linuxwacom
> - host_current="sourceforge.net"
> - section_path="projects/linuxwacom/files/$section"
> - srv_path="/home/frs/project/linuxwacom/$section"
> - list_to="linuxwacom-annou...@lists.sourceforge.net"
> - list_cc="linuxwacom-disc...@lists.sourceforge.net"
> -
> - echo "creating shell on sourceforge for $USER"
> - ssh -t ${USER_NAME%@},linuxwacom@$hostname create
> - #echo "Simply log out once you get to the prompt"
> - #ssh -t ${USER_NAME%@},linuxwacom@$hostname create
> - #echo "Sleeping for 30 seconds, because this sometimes helps
> against sourceforge's random authentication denials"
> - #sleep 30
> - fi
> -
> - # Use personal web space on the host for unit testing (leave
> commented out)
> - # srv_path="~/public_html$srv_path"
> -
> - # Check that the server path actually does exist
> - ssh $USER_NAME$hostname ls $srv_path >/dev/null 2>&1 ||
> - if [ $? -ne 0 ]; then
> - echo "Error: the path \"$srv_path\" on the web server does not
> exist."
> - cd $top_src
> - return 1
> - fi
> -
> - # Check for already existing tarballs
> - for tarball in $targz $tarbz2 $tarxz; do
> - ssh $USER_NAME$hostname ls $srv_path/$tarball >/dev/null 2>&1
> - if [ $? -eq 0 ]; then
> - if [ "x$FORCE" = "xyes" ]; then
> - echo "Warning: overwriting released tarballs due to
> --force option."
> - else
> - echo "Error: tarball $tar_name already exists. Use --force
> to overwrite."
> - cd $top_src
> - return 1
> - fi
> - fi
> - done
> -
> - # Upload to host using the 'scp' remote file copy program
> - if [ x"$DRY_RUN" = x ]; then
> - echo "Info: uploading tarballs to web server:"
> - scp $targz $tarbz2 $tarxz $siggz $sigbz2 $sigxz
> $USER_NAME$hostname:$srv_path
> - if [ $? -ne 0 ]; then
> - echo "Error: the tarballs uploading failed."
> - cd $top_src
> - return 1
> - fi
> - else
> - echo "Info: skipping tarballs uploading in dry-run mode."
> - echo " \"$srv_path\"."
> - fi
> -
> # Pushing the top commit tag to the remote repository
> if [ x$DRY_RUN = x ]; then
> echo "Info: pushing tag \"$tag_name\" to remote \"$remote_name\":"
> @@ -558,13 +635,20 @@ process_module() {
> echo "Info: skipped pushing tag \"$tag_name\" to the remote
> repository in dry-run mode."
> fi
>
> - MD5SUM=`which md5sum || which gmd5sum`
> - SHA1SUM=`which sha1sum || which gsha1sum`
> - SHA256SUM=`which sha256sum || which gsha256sum`
> + if [ -n "$SF_USERNAME" ]; then
> + release_to_sourceforge
> + fi
> +
> + if [ -n "$GH_USERNAME" ]; then
> + release_to_github
> + fi
>
> # --------- Generate the announce e-mail ------------------
> # Failing to generate the announce is not considered a fatal error
>
> + list_to="linuxwacom-annou...@lists.sourceforge.net"
> + list_cc="linuxwacom-disc...@lists.sourceforge.net"
> +
> # Git-describe returns only "the most recent tag", it may not be the
> expected one
> # However, we only use it for the commit history which will be the
> same anyway.
> tag_previous=`git describe --abbrev=0 HEAD^ 2>/dev/null`
> @@ -584,7 +668,26 @@ process_module() {
> fi
> generate_announce > "$tar_name.announce"
> echo "Info: [ANNOUNCE] template generated in \"$tar_name.announce\"
> file."
> - echo " Please pgp sign and send it."
> + echo " Please edit the .announce file to add a description of
> what's interesting and then"
> + echo " pgp sign and send it."
> +
> + # --------- Update the "body" text of the Github release with the
> .announce file -----------------
> +
> + if [ -n "$GH_RELEASE_ID" ]; then
> + # Read the announce email and then escape it as a string in order
> to add it to the JSON
> + read -r -d '' release_description <"$tar_name.announce"
> + release_descr=$(jq -n --arg release_description
> "$release_description" '$release_description')
> + api_json=$(printf '{"tag_name": "%s",
> + "target_commitish": "master",
> + "name": "%s",
> + "body": %s,
> + "draft": false,
> + "prerelease": false}' "$tar_name" "$tar_name"
> "$release_descr")
> + create_result=`curl -s -X PATCH --data "$api_json" -u
> $GH_USERNAME https://api.github.com/repos/$GH_REPO/$PROJECT/releases/$GH_
> RELEASE_ID`
> +
> + check_json_message "$create_result"
> + echo "Git shortlog posted to the release at Github, please edit
> the release to add a description of what's interesting."
> + fi
>
> # --------- Successful completion --------------------------
> cd $top_src
> @@ -696,11 +799,18 @@ do
> --no-quit)
> NO_QUIT=yes
> ;;
> - # Username of your fdo account if not configured in ssh
> - --user)
> + # Github username. Optional. Append colon and Personali
> + # Access Token to username if 2FA is enabled on the user
> + # account doing the release
> + --github)
> + GH_USERNAME=$2
> + shift
> + ;;
> + # Sourceforge username. Optional.
> + --sourceforge)
> check_option_args $1 $2
> shift
> - USER_NAME=$1
> + SF_USERNAME=$1
> ;;
> --*)
> echo ""
> @@ -731,6 +841,11 @@ do
> shift
> done
>
> +if [[ x$GH_USERNAME = "x" ]] && [[ x$SF_USERNAME = "x" ]] ; then
> + echo "At least one of --github or --sourceforge option required";
> + exit 1;
> +fi
> +
> # If no modules specified (blank cmd line) display help
> check_modules_specification
>
> --
> 2.7.4
>
>
> ------------------------------------------------------------
> ------------------
> Check out the vibrant tech community on one of the world's most
> engaging tech sites, Slashdot.org! http://sdm.link/slashdot
> _______________________________________________
> Linuxwacom-devel mailing list
> Linuxwacom-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/linuxwacom-devel
>
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Linuxwacom-devel mailing list
Linuxwacom-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linuxwacom-devel