From 9042f8b8a0aa9f427dae98a95fadcfee121d7a37 Mon Sep 17 00:00:00 2001 From: zhilv Date: Mon, 25 May 2026 22:46:48 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20fix(workflow):=20=E6=8F=90?= =?UTF-8?q?=E9=AB=98=20Rust=20=E7=8E=AF=E5=A2=83=E5=88=9D=E5=A7=8B?= =?UTF-8?q?=E5=8C=96=E5=85=BC=E5=AE=B9=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 用纯 shell 逻辑替换 PATH 过滤中的 awk 写法,避免不同 runner 上的 awk 语法差异 - 保持优先系统工具链、跳过 ~/.cargo/bin 的策略不变 - 修复安装 Rust 步骤在 shell 解析阶段直接失败的问题 --- .gitea/workflows/release.yml | 34 ++++++++++++++++++++++++++++++---- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/.gitea/workflows/release.yml b/.gitea/workflows/release.yml index 872a152..b7e05dc 100644 --- a/.gitea/workflows/release.yml +++ b/.gitea/workflows/release.yml @@ -60,8 +60,21 @@ jobs: - name: 安装 Rust run: | set -eux - PATH_WITHOUT_CARGO_BIN="$(printf '%s' "$PATH" | awk -v RS=: -v ORS=: '$0 != ENVIRON["HOME"] \"/.cargo/bin\" { print }' | sed 's/:$//')" - export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin${PATH_WITHOUT_CARGO_BIN:+:$PATH_WITHOUT_CARGO_BIN}" + PATH_BASE="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" + PATH_EXTRA="" + OLD_IFS="$IFS" + IFS=':' + set -- $PATH + IFS="$OLD_IFS" + for entry in "$@"; do + [ -n "$entry" ] || continue + [ "$entry" = "$HOME/.cargo/bin" ] && continue + case ":$PATH_BASE:$PATH_EXTRA:" in + *":$entry:"*) continue ;; + esac + PATH_EXTRA="${PATH_EXTRA:+$PATH_EXTRA:}$entry" + done + export PATH="$PATH_BASE${PATH_EXTRA:+:$PATH_EXTRA}" if ! command -v cargo >/dev/null 2>&1 || ! command -v rustc >/dev/null 2>&1; then [ -f "$HOME/.cargo/env" ] && . "$HOME/.cargo/env" fi @@ -78,8 +91,21 @@ jobs: - name: 构建发布包 run: | set -eux - PATH_WITHOUT_CARGO_BIN="$(printf '%s' "$PATH" | awk -v RS=: -v ORS=: '$0 != ENVIRON["HOME"] \"/.cargo/bin\" { print }' | sed 's/:$//')" - export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin${PATH_WITHOUT_CARGO_BIN:+:$PATH_WITHOUT_CARGO_BIN}" + PATH_BASE="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" + PATH_EXTRA="" + OLD_IFS="$IFS" + IFS=':' + set -- $PATH + IFS="$OLD_IFS" + for entry in "$@"; do + [ -n "$entry" ] || continue + [ "$entry" = "$HOME/.cargo/bin" ] && continue + case ":$PATH_BASE:$PATH_EXTRA:" in + *":$entry:"*) continue ;; + esac + PATH_EXTRA="${PATH_EXTRA:+$PATH_EXTRA:}$entry" + done + export PATH="$PATH_BASE${PATH_EXTRA:+:$PATH_EXTRA}" if ! command -v cargo >/dev/null 2>&1 || ! command -v rustc >/dev/null 2>&1; then [ -f "$HOME/.cargo/env" ] && . "$HOME/.cargo/env" fi