Skip to content

Commit

Permalink
feat: support multi path selector
Browse files Browse the repository at this point in the history
  • Loading branch information
vicanso committed Mar 21, 2024
1 parent 23f75ea commit 3ee53f0
Show file tree
Hide file tree
Showing 13 changed files with 3,289 additions and 31 deletions.
93 changes: 93 additions & 0 deletions .github/workflows/upload_asset.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
#!/bin/bash

# Assure parameters are correct.
if [ $# -lt 2 ]; then
echo "Usage: upload_asset.sh <FILE> <TOKEN>"
exit 1
fi

repo="vicanso/pingap"
file_path=$1
bearer=$2

echo "Starting asset upload from $file_path to $repo."

# Get the release for this tag.
tag="$(git describe --tags --abbrev=0)"

# Make sure the git tag could be determined.
if [ -z "$tag" ]; then
printf "\e[31mError: Unable to find git tag\e[0m\n"
exit 1
fi

echo "Git tag: $tag"

# Get the upload URL for the current tag.
#
# Since this might be a draft release, we can't just use the /releases/tags/:tag
# endpoint which only shows published releases.
echo "Checking for existing release..."
upload_url=$(\
curl \
-H "Authorization: Bearer $bearer" \
"https://api.github.com/repos/$repo/releases" \
2> /dev/null \
| grep -E "(upload_url|tag_name)" \
| paste - - \
| grep -e "tag_name\": \"$tag\"" \
| head -n 1 \
| sed 's/.*\(https.*assets\).*/\1/' \
)

# Create a new release if we didn't find one for this tag.
if [ -z "$upload_url" ]; then
echo "No release found."
echo "Creating new release..."

# Create new release.
response=$(
curl -f \
-X POST \
-H "Authorization: Bearer $bearer" \
-d "{\"tag_name\":\"$tag\",\"draft\":true}" \
"https://api.github.com/repos/$repo/releases" \
2> /dev/null\
)

# Abort if the release could not be created.
if [ $? -ne 0 ]; then
printf "\e[31mError: Unable to create new release.\e[0m\n"
exit 1;
fi

# Extract upload URL from new release.
upload_url=$(\
echo "$response" \
| grep "upload_url" \
| sed 's/.*: "\(.*\){.*/\1/' \
)
fi

# Propagate error if no URL for asset upload could be found.
if [ -z "$upload_url" ]; then
printf "\e[31mError: Unable to find release upload url.\e[0m\n"
exit 2
fi

# Upload the file to the tag's release.
file_name=${file_path##*/}
echo "Uploading asset $file_name to $upload_url..."
curl -v -f \
--http1.1 \
-X POST \
-H "Authorization: Bearer $bearer" \
-H "Content-Type: application/octet-stream" \
--data-binary @"$file_path" \
"$upload_url?name=$file_name" \
|| { \
printf "\e[31mError: Unable to upload asset.\e[0m\n" \
&& exit 3; \
}

printf "\e[32mSuccess\e[0m\n"
3 changes: 1 addition & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ target/

# Remove Cargo.lock from gitignore if creating an executable, leave it for libraries
# More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html
Cargo.lock

# These are backup files generated by rustfmt
**/*.rs.bk
Expand All @@ -17,4 +16,4 @@ Cargo.lock
# Added by cargo

/target
.vscode
.vscode
Loading

0 comments on commit 3ee53f0

Please sign in to comment.