78 lines
2.0 KiB
Bash
78 lines
2.0 KiB
Bash
#!/bin/sh
|
|
set -eu
|
|
|
|
token="${INPUT_TOKEN:-}"
|
|
version="${INPUT_VERSION:?INPUT_VERSION is required}"
|
|
nuget_source="${INPUT_SOURCE:?INPUT_SOURCE is required}"
|
|
api_key="${INPUT_API_KEY:?INPUT_API_KEY is required}"
|
|
asset_index="${INPUT_INDEX:-0}"
|
|
server_url="${GITEA_SERVER_URL:-${GITHUB_SERVER_URL:-}}"
|
|
repository="${GITEA_REPOSITORY:-${GITHUB_REPOSITORY:-}}"
|
|
|
|
if [ -z "${server_url}" ]; then
|
|
echo "GITEA_SERVER_URL or GITHUB_SERVER_URL is required" >&2
|
|
exit 1
|
|
fi
|
|
|
|
if [ -z "${repository}" ]; then
|
|
echo "GITEA_REPOSITORY or GITHUB_REPOSITORY is required" >&2
|
|
exit 1
|
|
fi
|
|
|
|
release_url="${server_url}/api/v1/repos/${repository}/releases/tags/v${version}"
|
|
work_dir="/tmp/nuget-push"
|
|
archive_dir="${work_dir}/archive"
|
|
output_dir="${work_dir}/output"
|
|
|
|
mkdir -p "${archive_dir}" "${output_dir}"
|
|
|
|
fetch_json() {
|
|
if [ -n "${token}" ]; then
|
|
curl -fsSL -H "Authorization: token ${token}" "$1"
|
|
return
|
|
fi
|
|
|
|
curl -fsSL "$1"
|
|
}
|
|
|
|
download_file() {
|
|
if [ -n "${token}" ]; then
|
|
curl -fsSL -H "Authorization: token ${token}" "$1" -o "$2"
|
|
return
|
|
fi
|
|
|
|
curl -fsSL "$1" -o "$2"
|
|
}
|
|
|
|
echo "RELEASE_URL: ${release_url}"
|
|
|
|
release_json="$(fetch_json "${release_url}")"
|
|
download_name="$(printf '%s' "${release_json}" | jq -er ".assets[${asset_index}].name")"
|
|
download_url="$(printf '%s' "${release_json}" | jq -er ".assets[${asset_index}].browser_download_url")"
|
|
archive_path="${archive_dir}/${download_name}"
|
|
|
|
echo "DOWNLOAD_NAME: ${download_name}"
|
|
echo "DOWNLOAD_URL: ${download_url}"
|
|
|
|
echo "ARTIFACT DOWNLOADING..."
|
|
download_file "${download_url}" "${archive_path}"
|
|
|
|
echo "ARTIFACT UNZIPPING..."
|
|
unzip -o "${archive_path}" -d "${output_dir}" >/dev/null
|
|
|
|
packages_found=0
|
|
|
|
echo "ARTIFACT PUSHING..."
|
|
for package in "${output_dir}"/*.nupkg; do
|
|
if [ ! -f "${package}" ]; then
|
|
continue
|
|
fi
|
|
|
|
packages_found=1
|
|
dotnet nuget push "${package}" --source "${nuget_source}" --api-key "${api_key}" --skip-duplicate
|
|
done
|
|
|
|
if [ "${packages_found}" -eq 0 ]; then
|
|
echo "No .nupkg files found after extracting ${download_name}" >&2
|
|
exit 1
|
|
fi |