From e79a1bbe483c268159398594b791e1d9adc866ab Mon Sep 17 00:00:00 2001 From: qxa Date: Thu, 6 Nov 2025 13:56:38 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 70 ++++++++++++++++++++++++++++++++++-- README.md | 70 +++++++++++++++++++++++++++++++++++- action.yaml | 102 ++++++++++++++++++++++++++++++++++++---------------- 3 files changed, 208 insertions(+), 34 deletions(-) diff --git a/.gitignore b/.gitignore index 501fd22..64831d1 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,68 @@ -.vs -.vscode +# Visual Studio +.vs/ +.vscode/ +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? + +# Build outputs +bin/ +obj/ +Release/ +Debug/ +publish/ + +# NuGet +.nuget/ +packages/ +*.nupkg + +# OS files +.DS_Store +Thumbs.db + +# Temporary files +*.tmp +*.temp +entrypoint.sh + +# Logs +*.log + +# Environment variables +.env +.env.local +.env.development.local +.env.test.local +.env.production.local + +# Docker +.dockerignore +Dockerfile.local + +# GitHub Actions +*.workflow + +# Editor directories and files +.idea/ +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? + +# OS generated files +Thumbs.db +Thumbs.db:encryptable +ehthumbs.db +ehthumbs_vista.db +*.stackdump +[Dd]esktop.ini +*.cab +*.msi +*.msix +*.msm +*.msp +*.lnk diff --git a/README.md b/README.md index c77afb5..be5fb86 100644 --- a/README.md +++ b/README.md @@ -1 +1,69 @@ -# aspnet编译插件 \ No newline at end of file +# ASP.NET 编译插件 + +这是一个用于 GitHub Actions 的 ASP.NET 项目编译插件,可以帮助您自动化编译、构建和发布 ASP.NET 项目。 + +## 功能特性 + +- 支持自定义项目名称 +- 可配置构建配置(Debug/Release) +- 支持目标运行时和操作系统设置 +- 提供NuGet包缓存选项 +- 可选的代码混淆功能(使用Obfuscar) + +## 使用方法 + +在您的 GitHub Actions 工作流文件中添加以下步骤: + +```yaml +- name: 编译ASP.NET项目 + uses: actions/aspnet@6.0 + with: + project_name: YourProjectName + configuration: Release + publish: publish +``` + +## 输入参数 + +| 参数名 | 描述 | 是否必需 | 默认值 | +|-------|------|----------|--------| +| `project_name` | 要编译的项目名称 | 是 | 无 | +| `configuration` | 发布所对应的配置 | 否 | Release | +| `runtime` | 要发布的目标运行时 | 否 | 无 | +| `os` | 目标操作系统 | 否 | 无 | +| `publish` | 输出目录 | 否 | publish | +| `nuget_dir` | NuGet包还原地址 | 否 | /opt/hostedtoolcache/.nuget/packages | + +## 示例 + +### 基本编译 + +```yaml +- name: 编译ASP.NET项目 + uses: actions/aspnet@6.0 + with: + project_name: MyWebApp +``` + +### 指定运行时和操作系统 + +```yaml +- name: 编译ASP.NET项目 + uses: actions/aspnet@6.0 + with: + project_name: MyWebApp + configuration: Release + runtime: win-x64 + os: win +``` + +### 使用代码混淆 + +确保项目中存在 `obfuscar.xml` 配置文件,插件会自动检测并执行混淆: + +```yaml +- name: 编译并混淆ASP.NET项目 + uses: actions/aspnet@6.0 + with: + project_name: MyWebApp +``` \ No newline at end of file diff --git a/action.yaml b/action.yaml index d0ea3b6..939f52d 100644 --- a/action.yaml +++ b/action.yaml @@ -1,16 +1,16 @@ name: aspnet -description: build aspnet +description: ASP.NET 项目自动化编译、构建和发布插件 author: qxa inputs: project_name: - description: 要编译的项目名称 + description: 要编译的项目名称(相对于工作目录的路径) required: true configuration: - description: 发布所对应的配置,默认值为 "Debug" + description: 发布所对应的配置,默认值为 "Release" required: false default: Release runtime: - description: 要发布的目标运行时。在创建自包含部署时使用 + description: 要发布的目标运行时,在创建自包含部署时使用 required: false os: description: 目标操作系统 @@ -20,42 +20,81 @@ inputs: required: false default: publish nuget_dir: - description: nuget包还原地址,如需缓存请挂载目录 + description: NuGet包还原地址,如需缓存请挂载目录 required: false default: /opt/hostedtoolcache/.nuget/packages + self_contained: + description: 是否创建自包含部署 + required: false + default: "false" runs: using: composite steps: - - name: 给脚本配置权限 + - name: 创建编译脚本 shell: bash - env: - script: | - #! /bin/bash - - option="--no-self-contained -o $INPUT_PUBLISH -c $INPUT_CONFIGURATION" - - if [ -n "$INPUT_RUNTIME" ]; then - option="$option -r $INPUT_RUNTIME" - fi - - if [ -n "$INPUT_OS" ]; then - option="$option --os $INPUT_OS" - fi - - echo "option=$option" - - dotnet --version - - dotnet restore $INPUT_PROJECT_NAME --packages ${{ inputs.nuget_dir }} - dotnet build $INPUT_PROJECT_NAME --packages ${{ inputs.nuget_dir }} - dotnet publish $option $INPUT_PROJECT_NAME --packages ${{ inputs.nuget_dir }} - run: | - echo "$script">entrypoint.sh + cat > entrypoint.sh << 'EOF' + #!/bin/bash + + # 设置错误时退出 + set -e + + echo "===== ASP.NET 编译插件开始执行 =====" + echo "项目名称: $INPUT_PROJECT_NAME" + echo "配置: $INPUT_CONFIGURATION" + echo "输出目录: $INPUT_PUBLISH" + + if [ "$INPUT_SELF_CONTAINED" = "true" ]; then + SELF_CONTAINED_OPTION="--self-contained" + else + SELF_CONTAINED_OPTION="--no-self-contained" + fi + + option="$SELF_CONTAINED_OPTION -o $INPUT_PUBLISH -c $INPUT_CONFIGURATION" + + if [ -n "$INPUT_RUNTIME" ]; then + option="$option -r $INPUT_RUNTIME" + echo "目标运行时: $INPUT_RUNTIME" + fi + + if [ -n "$INPUT_OS" ]; then + option="$option --os $INPUT_OS" + echo "目标操作系统: $INPUT_OS" + fi + + echo "发布选项: $option" + echo "NuGet包缓存目录: $INPUT_NUGET_DIR" + + echo "\n===== 检查 .NET SDK 版本 =====" + dotnet --version + + echo "\n===== 还原 NuGet 包 =====" + dotnet restore "$INPUT_PROJECT_NAME" --packages "$INPUT_NUGET_DIR" + + echo "\n===== 构建项目 =====" + dotnet build "$INPUT_PROJECT_NAME" --packages "$INPUT_NUGET_DIR" --no-restore + + echo "\n===== 发布项目 =====" + dotnet publish $option "$INPUT_PROJECT_NAME" --packages "$INPUT_NUGET_DIR" --no-build + + if [ -f "$INPUT_CONFIGURATION/obfuscar.xml" ]; then + echo "\n===== 检测到 obfuscar.xml,开始代码混淆 =====" + echo "安装混淆工具..." + dotnet tool install -g obfuscar.globaltool + echo "执行代码混淆..." + obfuscar.console "$INPUT_CONFIGURATION/obfuscar.xml" + echo "代码混淆完成" + else + echo "\n未检测到 $INPUT_CONFIGURATION/obfuscar.xml,跳过代码混淆" + fi + + echo "\n===== ASP.NET 编译插件执行完成 =====" + EOF + chmod +x entrypoint.sh - - name: 在docker中编译 + - name: 在Docker中编译ASP.NET项目 uses: docker://dotnet/sdk:6.0 with: entrypoint: ./entrypoint.sh @@ -66,7 +105,8 @@ runs: os: ${{ inputs.os }} publish: ${{ inputs.publish }} - - name: 删除文件 + - name: 清理临时文件 shell: bash run: | rm -f entrypoint.sh + echo "临时文件已清理"