From 41de29518a0df0e06cd172fbfffc3258dc1a82a7 Mon Sep 17 00:00:00 2001 From: YAO GUANG HONG Date: Wed, 1 Apr 2026 00:37:16 +0800 Subject: [PATCH 1/5] Create build-macos-m4.yml --- .github/workflows/build-macos-m4.yml | 49 ++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 .github/workflows/build-macos-m4.yml diff --git a/.github/workflows/build-macos-m4.yml b/.github/workflows/build-macos-m4.yml new file mode 100644 index 00000000..5d96432a --- /dev/null +++ b/.github/workflows/build-macos-m4.yml @@ -0,0 +1,49 @@ +name: Build Vaultwarden for macOS M4 (ARM64) + +on: + push: + branches: [ main ] + workflow_dispatch: # 允许手动触发 + +jobs: + build: + runs-on: macos-latest # 使用 GitHub 提供的 Apple Silicon 运行器 + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Install Rust toolchain + uses: dtolnay/rust-toolchain@stable + with: + targets: aarch64-apple-darwin + + - name: Install Dependencies + run: | + brew install openssl pkg-config + # 设置 OpenSSL 环境变量,这是编译 Rust 网络应用的关键 + echo "OPENSSL_ROOT_DIR=$(brew --prefix openssl)" >> $GITHUB_ENV + echo "OPENSSL_LIB_DIR=$(brew --prefix openssl)/lib" >> $GITHUB_ENV + echo "OPENSSL_INCLUDE_DIR=$(brew --prefix openssl)/include" >> $GITHUB_ENV + + - name: Rust Cache + uses: Swatinem/rust-cache@v2 + + - name: Build Vaultwarden + run: | + # 开启所有必要的 features,例如 sqlite/mysql/postgresql + # --release 模式生成优化后的二进制文件 + cargo build --release --target aarch64-apple-darwin --features sqlite,mysql,postgresql + + - name: Prepare Artifact + run: | + mkdir -p output + cp target/aarch64-apple-darwin/release/vaultwarden ./output/ + # 复制 web-vault (如果你的仓库里没有集成,可能需要单独处理前端) + # 注意:Vaultwarden 运行通常需要 web-vault 静态文件 + + - name: Upload Binary + uses: actions/upload-artifact@v4 + with: + name: vaultwarden-macos-m4 + path: ./output/vaultwarden From 12d877114281bda760c2dc956889634c90cff858 Mon Sep 17 00:00:00 2001 From: cloud Date: Wed, 1 Apr 2026 00:46:48 +0800 Subject: [PATCH 2/5] edit build-macos error edit build-macos error --- .github/workflows/build-macos-m4.yml | 36 ++++++++++++++++++---------- 1 file changed, 23 insertions(+), 13 deletions(-) diff --git a/.github/workflows/build-macos-m4.yml b/.github/workflows/build-macos-m4.yml index 5d96432a..b4621e06 100644 --- a/.github/workflows/build-macos-m4.yml +++ b/.github/workflows/build-macos-m4.yml @@ -3,11 +3,11 @@ name: Build Vaultwarden for macOS M4 (ARM64) on: push: branches: [ main ] - workflow_dispatch: # 允许手动触发 + workflow_dispatch: jobs: build: - runs-on: macos-latest # 使用 GitHub 提供的 Apple Silicon 运行器 + runs-on: macos-latest steps: - name: Checkout code @@ -20,30 +20,40 @@ jobs: - name: Install Dependencies run: | - brew install openssl pkg-config - # 设置 OpenSSL 环境变量,这是编译 Rust 网络应用的关键 - echo "OPENSSL_ROOT_DIR=$(brew --prefix openssl)" >> $GITHUB_ENV - echo "OPENSSL_LIB_DIR=$(brew --prefix openssl)/lib" >> $GITHUB_ENV - echo "OPENSSL_INCLUDE_DIR=$(brew --prefix openssl)/include" >> $GITHUB_ENV + # 安装编译所需的依赖 + brew install openssl mysql-client pkg-config + + # 获取 brew 安装路径的动态变量 + MYSQL_PATH=$(brew --prefix mysql-client) + OPENSSL_PATH=$(brew --prefix openssl) + + # 设置 MySQL 相关的环境变量,让 mysqlclient-sys 能找到库 + echo "MYSQLCLIENT_LIB_DIR=$MYSQL_PATH/lib" >> $GITHUB_ENV + echo "MYSQLCLIENT_VERSION=8.0" >> $GITHUB_ENV # 这里的版本号通常跟随主版本 + + # 将 mysql_config 加入 PATH,这是许多库寻找 mysql 配置的备选方案 + echo "$MYSQL_PATH/bin" >> $GITHUB_PATH + + # 设置 OpenSSL 环境变量 + echo "OPENSSL_ROOT_DIR=$OPENSSL_PATH" >> $GITHUB_ENV - name: Rust Cache uses: Swatinem/rust-cache@v2 - name: Build Vaultwarden run: | - # 开启所有必要的 features,例如 sqlite/mysql/postgresql - # --release 模式生成优化后的二进制文件 - cargo build --release --target aarch64-apple-darwin --features sqlite,mysql,postgresql + # 显式指定 target 并开启 features + cargo build --release \ + --target aarch64-apple-darwin \ + --features sqlite,mysql,postgresql - name: Prepare Artifact run: | mkdir -p output cp target/aarch64-apple-darwin/release/vaultwarden ./output/ - # 复制 web-vault (如果你的仓库里没有集成,可能需要单独处理前端) - # 注意:Vaultwarden 运行通常需要 web-vault 静态文件 - name: Upload Binary uses: actions/upload-artifact@v4 with: name: vaultwarden-macos-m4 - path: ./output/vaultwarden + path: ./output/vaultwarden \ No newline at end of file From 4fbc8026b922fa99dd4950720bbe268e2f767cd1 Mon Sep 17 00:00:00 2001 From: cloud Date: Wed, 1 Apr 2026 01:17:55 +0800 Subject: [PATCH 3/5] add libpq fix build error --- .github/workflows/build-macos-m4.yml | 30 +++++++++++++++++----------- 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/.github/workflows/build-macos-m4.yml b/.github/workflows/build-macos-m4.yml index b4621e06..7a086d51 100644 --- a/.github/workflows/build-macos-m4.yml +++ b/.github/workflows/build-macos-m4.yml @@ -20,29 +20,35 @@ jobs: - name: Install Dependencies run: | - # 安装编译所需的依赖 - brew install openssl mysql-client pkg-config + # 1. 安装所有必需的数据库客户端和工具 + brew install openssl mysql-client libpq pkg-config - # 获取 brew 安装路径的动态变量 - MYSQL_PATH=$(brew --prefix mysql-client) + # 2. 设置 OpenSSL 路径 OPENSSL_PATH=$(brew --prefix openssl) - - # 设置 MySQL 相关的环境变量,让 mysqlclient-sys 能找到库 - echo "MYSQLCLIENT_LIB_DIR=$MYSQL_PATH/lib" >> $GITHUB_ENV - echo "MYSQLCLIENT_VERSION=8.0" >> $GITHUB_ENV # 这里的版本号通常跟随主版本 + echo "OPENSSL_ROOT_DIR=$OPENSSL_PATH" >> $GITHUB_ENV - # 将 mysql_config 加入 PATH,这是许多库寻找 mysql 配置的备选方案 + # 3. 设置 MySQL 路径与环境变量 + MYSQL_PATH=$(brew --prefix mysql-client) + echo "MYSQLCLIENT_LIB_DIR=$MYSQL_PATH/lib" >> $GITHUB_ENV + echo "MYSQLCLIENT_VERSION=8.0" >> $GITHUB_ENV echo "$MYSQL_PATH/bin" >> $GITHUB_PATH - # 设置 OpenSSL 环境变量 - echo "OPENSSL_ROOT_DIR=$OPENSSL_PATH" >> $GITHUB_ENV + # 4. 设置 PostgreSQL (libpq) 路径 + # libpq 同样是 keg-only 的,必须手动导出路径给链接器 + PQ_PATH=$(brew --prefix libpq) + echo "LDFLAGS=-L$PQ_PATH/lib" >> $GITHUB_ENV + echo "CPPFLAGS=-I$PQ_PATH/include" >> $GITHUB_ENV + echo "PKG_CONFIG_PATH=$PQ_PATH/lib/pkgconfig" >> $GITHUB_ENV + # 这一步很关键:将 libpq 的 bin 目录加入 PATH + echo "$PQ_PATH/bin" >> $GITHUB_PATH + # 显式给 Rust 的链接器指定库文件路径 + echo "LIBRARY_PATH=$PQ_PATH/lib" >> $GITHUB_ENV - name: Rust Cache uses: Swatinem/rust-cache@v2 - name: Build Vaultwarden run: | - # 显式指定 target 并开启 features cargo build --release \ --target aarch64-apple-darwin \ --features sqlite,mysql,postgresql From ba0f341e40bfe9686eedebf8cbda7465286ec338 Mon Sep 17 00:00:00 2001 From: cloud Date: Wed, 1 Apr 2026 01:32:37 +0800 Subject: [PATCH 4/5] Build and Release Vaultwarden for macOS M4 add Release --- .github/workflows/build-macos-m4.yml | 63 ++++++++++++++-------------- 1 file changed, 31 insertions(+), 32 deletions(-) diff --git a/.github/workflows/build-macos-m4.yml b/.github/workflows/build-macos-m4.yml index 7a086d51..92df0bc8 100644 --- a/.github/workflows/build-macos-m4.yml +++ b/.github/workflows/build-macos-m4.yml @@ -1,13 +1,16 @@ -name: Build Vaultwarden for macOS M4 (ARM64) +name: Build and Release Vaultwarden for macOS M4 on: push: - branches: [ main ] - workflow_dispatch: + tags: + - 'v*' # 当推送以 v 开头的 tag 时触发 (如 v1.0.0) + workflow_dispatch: # 允许手动触发测试 jobs: build: runs-on: macos-latest + permissions: # 赋予写入 Release 的权限 + contents: write steps: - name: Checkout code @@ -20,29 +23,17 @@ jobs: - name: Install Dependencies run: | - # 1. 安装所有必需的数据库客户端和工具 brew install openssl mysql-client libpq pkg-config - - # 2. 设置 OpenSSL 路径 - OPENSSL_PATH=$(brew --prefix openssl) - echo "OPENSSL_ROOT_DIR=$OPENSSL_PATH" >> $GITHUB_ENV - - # 3. 设置 MySQL 路径与环境变量 - MYSQL_PATH=$(brew --prefix mysql-client) - echo "MYSQLCLIENT_LIB_DIR=$MYSQL_PATH/lib" >> $GITHUB_ENV - echo "MYSQLCLIENT_VERSION=8.0" >> $GITHUB_ENV - echo "$MYSQL_PATH/bin" >> $GITHUB_PATH - - # 4. 设置 PostgreSQL (libpq) 路径 - # libpq 同样是 keg-only 的,必须手动导出路径给链接器 - PQ_PATH=$(brew --prefix libpq) - echo "LDFLAGS=-L$PQ_PATH/lib" >> $GITHUB_ENV - echo "CPPFLAGS=-I$PQ_PATH/include" >> $GITHUB_ENV - echo "PKG_CONFIG_PATH=$PQ_PATH/lib/pkgconfig" >> $GITHUB_ENV - # 这一步很关键:将 libpq 的 bin 目录加入 PATH - echo "$PQ_PATH/bin" >> $GITHUB_PATH - # 显式给 Rust 的链接器指定库文件路径 - echo "LIBRARY_PATH=$PQ_PATH/lib" >> $GITHUB_ENV + { + echo "OPENSSL_ROOT_DIR=$(brew --prefix openssl)" + echo "MYSQLCLIENT_LIB_DIR=$(brew --prefix mysql-client)/lib" + echo "MYSQLCLIENT_VERSION=8.0" + echo "LIBRARY_PATH=$(brew --prefix libpq)/lib" + echo "PKG_CONFIG_PATH=$(brew --prefix libpq)/lib/pkgconfig" + echo "LIBSQLITE3_SYS_BUNDLED=1" + } >> $GITHUB_ENV + echo "$(brew --prefix mysql-client)/bin" >> $GITHUB_PATH + echo "$(brew --prefix libpq)/bin" >> $GITHUB_PATH - name: Rust Cache uses: Swatinem/rust-cache@v2 @@ -53,13 +44,21 @@ jobs: --target aarch64-apple-darwin \ --features sqlite,mysql,postgresql - - name: Prepare Artifact + - name: Prepare Assets run: | - mkdir -p output - cp target/aarch64-apple-darwin/release/vaultwarden ./output/ + mkdir -p publish + # 将二进制文件重命名,方便用户识别架构 + cp target/aarch64-apple-darwin/release/vaultwarden ./publish/vaultwarden-macos-arm64 + # 进入目录进行压缩 (可选,推荐压缩以减小体积) + cd publish && tar -czvf vaultwarden-macos-arm64.tar.gz vaultwarden-macos-arm64 - - name: Upload Binary - uses: actions/upload-artifact@v4 + - name: Create GitHub Release + uses: softprops/action-gh-release@v2 + if: startsWith(github.ref, 'refs/tags/') with: - name: vaultwarden-macos-m4 - path: ./output/vaultwarden \ No newline at end of file + files: ./publish/vaultwarden-macos-arm64.tar.gz + name: Release ${{ github.ref_name }} + draft: false + prerelease: false + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file From df34dadbda7f3215474c099e4ba5dc71d9507c54 Mon Sep 17 00:00:00 2001 From: cloud Date: Wed, 1 Apr 2026 01:39:12 +0800 Subject: [PATCH 5/5] Build and Release Vaultwarden for macOS M4 add .evn config --- .github/workflows/build-macos-m4.yml | 64 ++++++++++++++++++++-------- 1 file changed, 47 insertions(+), 17 deletions(-) diff --git a/.github/workflows/build-macos-m4.yml b/.github/workflows/build-macos-m4.yml index 92df0bc8..292ce820 100644 --- a/.github/workflows/build-macos-m4.yml +++ b/.github/workflows/build-macos-m4.yml @@ -1,15 +1,16 @@ -name: Build and Release Vaultwarden for macOS M4 +name: Build Vaultwarden +# name: Build and Release Vaultwarden Full Package (macOS M4) on: push: tags: - - 'v*' # 当推送以 v 开头的 tag 时触发 (如 v1.0.0) - workflow_dispatch: # 允许手动触发测试 + - 'v*' # 当推送 v1.0.0 等标签时触发 + workflow_dispatch: # 支持手动点击运行 jobs: build: runs-on: macos-latest - permissions: # 赋予写入 Release 的权限 + permissions: contents: write steps: @@ -24,6 +25,7 @@ jobs: - name: Install Dependencies run: | brew install openssl mysql-client libpq pkg-config + { echo "OPENSSL_ROOT_DIR=$(brew --prefix openssl)" echo "MYSQLCLIENT_LIB_DIR=$(brew --prefix mysql-client)/lib" @@ -32,33 +34,61 @@ jobs: echo "PKG_CONFIG_PATH=$(brew --prefix libpq)/lib/pkgconfig" echo "LIBSQLITE3_SYS_BUNDLED=1" } >> $GITHUB_ENV + echo "$(brew --prefix mysql-client)/bin" >> $GITHUB_PATH echo "$(brew --prefix libpq)/bin" >> $GITHUB_PATH - name: Rust Cache uses: Swatinem/rust-cache@v2 - - name: Build Vaultwarden + - name: Build Vaultwarden Backend run: | cargo build --release \ --target aarch64-apple-darwin \ --features sqlite,mysql,postgresql - - name: Prepare Assets + - name: Prepare Full Package (Backend + Frontend) run: | - mkdir -p publish - # 将二进制文件重命名,方便用户识别架构 - cp target/aarch64-apple-darwin/release/vaultwarden ./publish/vaultwarden-macos-arm64 - # 进入目录进行压缩 (可选,推荐压缩以减小体积) - cd publish && tar -czvf vaultwarden-macos-arm64.tar.gz vaultwarden-macos-arm64 + # 1. 创建打包目录 + mkdir -p vaultwarden-macos-m4 + + # 2. 复制二进制文件 + cp target/aarch64-apple-darwin/release/vaultwarden ./vaultwarden-macos-m4/ + + # 3. 下载并解压最新的 Web Vault (前端界面) + # 使用 GitHub API 获取最新版下载链接 + WEB_VAULT_URL=$(curl -s https://api.github.com/repos/dani-garcia/bw_web_builds/releases/latest | grep "browser_download_url.*tar.gz" | cut -d '"' -f 4) + echo "Downloading Web Vault from: $WEB_VAULT_URL" + curl -L "$WEB_VAULT_URL" -o web-vault.tar.gz + tar -xzf web-vault.tar.gz -C ./vaultwarden-macos-m4/ + rm web-vault.tar.gz + + # 4. 准备默认环境变量模板 + cat < ./vaultwarden-macos-m4/.env +# Vaultwarden Configuration +DOMAIN=http://localhost:8080 +SIGNUPS_ALLOWED=true +WEB_VAULT_ENABLED=true +WEB_VAULT_FOLDER=web-vault +DATABASE_URL=data/db.sqlite3 +IP_HEADER=X-Real-IP +EOF + + # 5. 打包成 ZIP + zip -r vaultwarden-macos-m4-full.zip vaultwarden-macos-m4/ - name: Create GitHub Release uses: softprops/action-gh-release@v2 if: startsWith(github.ref, 'refs/tags/') with: - files: ./publish/vaultwarden-macos-arm64.tar.gz - name: Release ${{ github.ref_name }} - draft: false - prerelease: false - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file + files: vaultwarden-macos-m4-full.zip + body: | + ## Vaultwarden for macOS (Apple Silicon M1/M2/M3/M4) + + 此版本包含: + - **Vaultwarden Binary**: 针对 `aarch64-apple-darwin` 编译 + - **Web Vault**: 自动集成的最新前端界面 + - **Database Support**: 支持 SQLite (内置), MySQL, PostgreSQL + + **使用说明:** + 1. 下载 \ No newline at end of file