diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..62fd762 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,12 @@ +FROM mcr.microsoft.com/dotnet/sdk:10.0 + +# 更新並安裝必要的工具後清理暫存檔案以減小映像檔大小 +RUN apt update \ + && apt install -y 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..ca579ad 100644 --- a/action.yaml +++ b/action.yaml @@ -1,38 +1,20 @@ name: 'NUGET PUSH' -description: '打包套件' +description: '推送 NUGET 套件' author: 'Jeffery' inputs: - token: - default: '' - version: + RELEASE_VERSION: required: true - source: - required: true - api_key: - required: true - index: + description: '要推送的版本號,ex: ${{ needs.calculate.outputs.version }}' + RELEASE_INDEX: default: 0 + description: '要推送的版本中第幾個成品,預設為 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' + env: + GITEA_SERVER_URL: ${{ gitea.server_url }} + GITEA_REPOSITORY: ${{ gitea.repository }} + RELEASE_VERSION: ${{ inputs.RELEASE_VERSION }} + RELEASE_INDEX: ${{ inputs.RELEASE_INDEX }} + RUNNER_TOKEN: ${{ secrets.RUNNER_TOKEN }} + NUGET_AUTHOR: ${{ gitea.author }} \ No newline at end of file diff --git a/entrypoint.sh b/entrypoint.sh new file mode 100644 index 0000000..047df25 --- /dev/null +++ b/entrypoint.sh @@ -0,0 +1,73 @@ +#!/bin/bash + +echo "==================================================" + +echo "參數檢查" + +echo "--------------------------------------------------" + +# 顯示 GITEA_SERVER_URL 參數,並檢查是否為空或 "null",如果是則輸出錯誤訊息並退出 +echo "GITEA_SERVER_URL=$GITEA_SERVER_URL" && ([ -z "$GITEA_SERVER_URL" ] || [ "$GITEA_SERVER_URL" = "null" ]) && exit 1 + +# 顯示 GITEA_REPOSITORY 參數,並檢查是否為空或 "null",如果是則輸出錯誤訊息並退出 +echo "GITEA_REPOSITORY=$GITEA_REPOSITORY" && ([ -z "$GITEA_REPOSITORY" ] || [ "$GITEA_REPOSITORY" = "null" ]) && exit 1 + +# 顯示 RELEASE_VERSION 參數,並檢查是否為空或 "null",如果是則輸出錯誤訊息並退出 +echo "RELEASE_VERSION=$RELEASE_VERSION" && ([ -z "$RELEASE_VERSION" ] || [ "$RELEASE_VERSION" = "null" ]) && exit 1 + +# 顯示 RELEASE_INDEX 參數,並檢查是否為空或 "null",如果是則輸出錯誤訊息並退出 +echo "RELEASE_INDEX=$RELEASE_INDEX" && ([ -z "$RELEASE_INDEX" ] || [ "$RELEASE_INDEX" = "null" ]) && exit 1 + +# 顯示 RUNNER_TOKEN 參數,並檢查是否為空或 "null",如果是則輸出錯誤訊息並退出 +echo "RUNNER_TOKEN=$RUNNER_TOKEN" && ([ -z "$RUNNER_TOKEN" ] || [ "$RUNNER_TOKEN" = "null" ]) && exit 1 + +# 顯示 NUGET_AUTHOR 參數,並檢查是否為空或 "null",如果是則輸出錯誤訊息並退出 +echo "NUGET_AUTHOR=$NUGET_AUTHOR" && ([ -z "$NUGET_AUTHOR" ] || [ "$NUGET_AUTHOR" = "null" ]) && exit 1 + +echo "==================================================" + +echo "取得成品連結" + +echo "--------------------------------------------------" + +# 組合 RELEASE_HEADER 參數,並顯示出來 +RELEASE_HEADER="Authorization: token $RUNNER_TOKEN" && echo "RELEASE_HEADER=$RELEASE_HEADER" + +# 組合 RELEASE_URL 參數,並顯示出來 +RELEASE_URL="$GITEA_SERVER_URL/api/v1/repos/$GITEA_REPOSITORY/releases/tags/v$RELEASE_VERSION" && echo "RELEASE_URL=$RELEASE_URL" + +# 取得成品資訊 +RELEASE_JSON="$(curl -s -H "$RELEASE_HEADER" "$RELEASE_URL")" + +# 從成品資訊取得名稱與連結 +RELEASE_NAME="$(echo "$RELEASE_JSON" | jq -r ".assets[$RELEASE_INDEX].name")" && echo "RELEASE_NAME=$RELEASE_NAME" +RELEASE_URL="$(echo "$RELEASE_JSON" | jq -r ".assets[$RELEASE_INDEX].browser_download_url")" && echo "RELEASE_URL=$RELEASE_URL" + +echo "==================================================" + +echo "下載成品" + +echo "--------------------------------------------------" + +curl -H "$RELEASE_HEADER" "$RELEASE_URL" -o "$RELEASE_NAME" + +echo "==================================================" + +echo "解壓縮成品" + +echo "--------------------------------------------------" + +unzip "$RELEASE_NAME" -d output + +echo "==================================================" + +echo "推送 NUGET 套件" + +echo "--------------------------------------------------" + +# 組合 NUGET_SOURCE 參數,並顯示出來 +NUGET_SOURCE="$GITEA_SERVER_URL/api/packages/$NUGET_AUTHOR/nuget/index.json" && echo "NUGET_SOURCE=$NUGET_SOURCE" + +dotnet nuget push "output/*.nupkg" --source "$NUGET_SOURCE" --api-key "$RUNNER_TOKEN" --skip-duplicate --allow-insecure-connections + +echo "==================================================" \ No newline at end of file