From ee0561e1878fb9cb9746f3939b57b9dfc613f7a4 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Fri, 15 Aug 2025 14:19:05 +0000 Subject: [PATCH 1/2] fix: Make release workflow tag trigger more flexible This commit updates the GitHub Actions workflow for releases to be more flexible. The workflow will now trigger on tags that follow either the 'v*.*.*' pattern or the '*.*.*' pattern. This allows the user to create releases using tags with or without a 'v' prefix (e.g., 'v1.2.3' or '1.2.3'). --- .github/workflows/release.yml | 66 +++++++++++++++++++++++++++++++++ README.md | 36 +++++++++++++++++- release.sh | 69 +++++++++++++++++++++++++++++++++++ 3 files changed, 169 insertions(+), 2 deletions(-) create mode 100644 .github/workflows/release.yml create mode 100755 release.sh diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 00000000..89c37ed6 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,66 @@ +name: Release + +on: + push: + tags: + - 'v*.*.*' + - '*.*.*' + +jobs: + release: + name: Create Release + runs-on: ubuntu-latest + permissions: + contents: write + steps: + - name: Checkout code + uses: actions/checkout@v3 + + - name: Set up PHP + uses: shivammathur/setup-php@v2 + with: + php-version: '8.2' + extensions: mbstring, intl, gd, sqlite3, pdo_sqlite, zip, bcmath + coverage: none + + - name: Get Composer Cache Directory + id: composer-cache + run: | + echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT + + - uses: actions/cache@v3 + with: + path: ${{ steps.composer-cache.outputs.dir }} + key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} + restore-keys: | + ${{ runner.os }}-composer- + + - name: Install Composer dependencies + run: composer install --no-interaction --no-progress --no-suggest --no-dev --optimize-autoloader + + - name: Set up Node.js + uses: actions/setup-node@v3 + with: + node-version: '20' + cache: 'yarn' + + - name: Install Node.js dependencies + run: yarn install --frozen-lockfile + + - name: Get version + id: get_version + run: | + VERSION=$(grep -o '"version": "[^"]*"' version.json | grep -o '[^"]*$') + echo "VERSION=$VERSION" >> $GITHUB_ENV + + - name: Build release package + run: | + chmod +x release.sh + ./release.sh + + - name: Create Release and Upload Asset + uses: softprops/action-gh-release@v1 + with: + files: "grocy_${{ env.VERSION }}.zip" + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/README.md b/README.md index 4851d3da..6319ae40 100644 --- a/README.md +++ b/README.md @@ -61,13 +61,45 @@ ### 方式二:手动安装 -如果您熟悉网站搭建,可以按照以下步骤进行手动安装: -1. 下载 [最新发布版](https://releases.grocy.info/latest)。 +对于熟悉网站环境搭建的用户,可以选择手动安装。 + +#### 1. 下载预编译包 + +您可以直接从本项目的 [GitHub Releases](https://github.com/nishizhen/AnticlockwiseGrocy/releases) 页面下载最新的 `grocy_x.x.x.zip` 包。这个包里已经包含了所有必需的依赖,开箱即用。 + +#### 2. 自行打包(适合开发者) + +如果您想基于最新的源代码自行打包,可以按以下步骤操作: + +1. 确保您的开发环境中已安装 `bash`, `zip`, `composer` 和 `yarn`。 +2. 在项目根目录下,运行打包脚本: + ```bash + ./release.sh + ``` +3. 脚本执行成功后,会在项目根目录下生成一个 `grocy_x.x.x.zip` 文件。 + +#### 3. 安装步骤 + +获取到 `zip` 包后,请按照以下步骤进行安装: +1. 将 `zip` 包解压到您的网站服务器的指定目录。 2. 将 `config-dist.php` 复制为 `data/config.php`,并根据您的需求进行修改。 3. 确保 `data` 目录具有写入权限。 4. 将您的网站服务器根目录指向 `public` 目录。 5. 默认登录用户为 `admin`,密码为 `admin`,请在登录后立即修改密码。 +#### 4. 自动发布 (GitHub Actions) + +本项目已配置 [GitHub Actions](https://github.com/features/actions),可以在您创建新的 release 时自动构建和上传安装包。 + +要触发自动发布,请按以下步骤操作: +1. 确保您的代码已提交到 `master` 分支。 +2. 基于 `master` 分支创建一个新的 tag,并推送到 GitHub。tag 的名字需要符合 `v*.*.*` 的格式,例如 `v1.2.3`。 + ```bash + git tag v1.2.3 + git push origin v1.2.3 + ``` +3. 推送 tag 后,GitHub Actions 会自动开始构建,并将生成的 `grocy_x.x.x.zip` 文件上传到您刚刚创建的 release 页面。 + 更多详细的安装说明和帮助,请参考原版 Grocy 的文档。我们正在努力编写更符合中国用户习惯的中文文档。 ## 未来计划 (Roadmap) diff --git a/release.sh b/release.sh new file mode 100755 index 00000000..06c760f9 --- /dev/null +++ b/release.sh @@ -0,0 +1,69 @@ +#!/bin/bash + +# Exit on any error +set -e + +# --- Config --- +# Get the version from version.json +VERSION=$(grep -o '"version": "[^"]*' version.json | grep -o '[^"]*$') +RELEASE_NAME="grocy" +RELEASE_FILE_NAME="${RELEASE_NAME}_${VERSION}.zip" +RELEASE_BUILD_DIR=".release" +RELEASE_APP_DIR="${RELEASE_BUILD_DIR}/${RELEASE_NAME}" +# --- + +echo "▶️ Starting release creation of version ${VERSION}..." + +# --------------------------------------------------------------------------------------------------------- +echo "▶️ 1. Initial cleanup..." + +rm -f ${RELEASE_FILE_NAME} +rm -rf ${RELEASE_BUILD_DIR} +mkdir -p ${RELEASE_APP_DIR} + +# --------------------------------------------------------------------------------------------------------- +echo "▶️ 2. Installing composer dependencies..." + +composer install --no-dev --optimize-autoloader + +# --------------------------------------------------------------------------------------------------------- +echo "▶️ 3. Installing npm dependencies..." + +yarn install + +# --------------------------------------------------------------------------------------------------------- +echo "▶️ 4. Copying all application files..." + +rsync -av . ${RELEASE_APP_DIR} \ + --exclude ".git" \ + --exclude ".github" \ + --exclude ".gitignore" \ + --exclude ".gitattributes" \ + --exclude ".devcontainer" \ + --exclude ".release" \ + --exclude "release.sh" \ + --exclude "tests" \ + --exclude ".editorconfig" \ + --exclude ".php-cs-fixer.php" \ + --exclude ".tx" \ + --exclude ".vscode" \ + --exclude ".yarnrc" \ + --exclude "yarn.lock" \ + --exclude "package.json" \ + --exclude "composer.json" \ + --exclude "composer.lock" + +# --------------------------------------------------------------------------------------------------------- +echo "▶️ 5. Creating the release ZIP archive..." + +cd ${RELEASE_BUILD_DIR} +zip -r ../${RELEASE_FILE_NAME} . +cd .. + +# --------------------------------------------------------------------------------------------------------- +echo "▶️ 6. Final cleanup..." + +rm -rf ${RELEASE_BUILD_DIR} + +# --------------------------------------------------------------------------------------------------------- +echo "✅ Release successfully created: ${RELEASE_FILE_NAME}" From 7eaa8cf1483d3c5826a51f035a51fb12e79150c7 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Fri, 15 Aug 2025 14:25:13 +0000 Subject: [PATCH 2/2] fix: Correct release workflow trigger and version extraction This commit addresses two issues in the release workflow: 1. The tag trigger has been reverted to only accept tags matching the `v*.*.*` pattern, as requested by the user. 2. The `grep` command used to extract the version number from `version.json` has been made more robust to prevent errors during the workflow run. --- .github/workflows/release.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 89c37ed6..3cbf1a9d 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -4,7 +4,6 @@ on: push: tags: - 'v*.*.*' - - '*.*.*' jobs: release: @@ -50,7 +49,7 @@ jobs: - name: Get version id: get_version run: | - VERSION=$(grep -o '"version": "[^"]*"' version.json | grep -o '[^"]*$') + VERSION=$(grep -oP '(?<="version": ")[^"]*' version.json) echo "VERSION=$VERSION" >> $GITHUB_ENV - name: Build release package