From 049673f18299c42dd5a78c64826cb5dbbf9188a0 Mon Sep 17 00:00:00 2001 From: Jeffery Date: Fri, 20 Mar 2026 14:33:03 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=94=B9=E6=88=90=20docker=20action?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile | 11 ++++++++ action.yaml | 25 ++--------------- entrypoint.sh | 78 +++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 91 insertions(+), 23 deletions(-) create mode 100644 Dockerfile create mode 100644 entrypoint.sh diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..14b2525 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,11 @@ +FROM mcr.microsoft.com/dotnet/sdk:8.0 + +RUN apt-get update \ + && apt-get install -y --no-install-recommends curl jq unzip \ + && rm -rf /var/lib/apt/lists/* + +COPY entrypoint.sh /entrypoint.sh + +RUN chmod +x /entrypoint.sh + +ENTRYPOINT ["/entrypoint.sh"] \ No newline at end of file diff --git a/action.yaml b/action.yaml index eacba41..61c8479 100644 --- a/action.yaml +++ b/action.yaml @@ -13,26 +13,5 @@ inputs: index: default: 0 runs: - using: "composite" - steps: - - run: | - HEADER="Authorization: token ${{ inputs.token }}" - SOURCE="${{ gitea.server_url }}/api/v1/repos/${{ gitea.repository }}/releases/tags/v${{ inputs.version }}" - echo "HEADER: $HEADER" - echo "SOURCE: $SOURCE" - - RELEASE_JSON="$(curl -s -H "$HEADER" "$SOURCE")" - DOWNLOAD_NAME="$(echo "$RELEASE_JSON" | jq -r ".assets[${{ inputs.index }}].name")" - DOWNLOAD_URL="$(echo "$RELEASE_JSON" | jq -r ".assets[${{ inputs.index }}].browser_download_url")" - - echo "DOWNLOAD_NAME: $DOWNLOAD_NAME" - echo "DOWNLOAD_URL: $DOWNLOAD_URL" - - echo "ARTIFACT DOWNLOADING..." - curl -s -H "$HEADER" "$DOWNLOAD_URL" -o "$DOWNLOAD_NAME" - - echo "ARTIFACT UNZIPPING..." - unzip "$DOWNLOAD_NAME" -d output - - echo "ARTIFACT PUSHING..." - dotnet nuget push "output/*.nupkg" --source "${{ inputs.source }}" --api-key "${{ inputs.api_key }}" --skip-duplicate --allow-insecure-connections \ No newline at end of file + using: 'docker' + image: 'Dockerfile' diff --git a/entrypoint.sh b/entrypoint.sh new file mode 100644 index 0000000..244272f --- /dev/null +++ b/entrypoint.sh @@ -0,0 +1,78 @@ +#!/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 --allow-insecure-connections +done + +if [ "${packages_found}" -eq 0 ]; then + echo "No .nupkg files found after extracting ${download_name}" >&2 + exit 1 +fi \ No newline at end of file