diff --git a/.gitea/workflows/buildsite.yaml b/.gitea/workflows/buildsite.yaml index 0690551..63c9c07 100644 --- a/.gitea/workflows/buildsite.yaml +++ b/.gitea/workflows/buildsite.yaml @@ -2,33 +2,54 @@ name: Deploy Incremental Updates to NEUxiaozhan on: push: - branches: - - master + branches: [master] jobs: deploy: runs-on: self-hosted steps: - - name: Deploy Incremental Updates + - name: Prepare workspace shell: bash run: | - REPO_PATH="/opt/gitea/data/gitea-repositories/ember/front.git" - WEB_ROOT="/www/wwwroot/front/public" + # 设置本地仓库路径(根据实际路径调整) + LOCAL_REPO="/opt/gitea/data/gitea-repositories/ember/front.git" + WORKSPACE="/tmp/gitea_workflow" - # 进入仓库目录 - cd "$REPO_PATH" + # 创建临时工作区 + mkdir -p $WORKSPACE + cd $WORKSPACE + + # 克隆本地仓库(使用bare repo) + git clone $LOCAL_REPO . - # 获取最新代码 - git fetch origin master + - name: Get changed files + id: changed-files + shell: bash + run: | + cd /tmp/gitea_workflow + + # 处理首次提交的情况 + if git rev-parse HEAD^ >/dev/null 2>&1; then + git diff --name-only HEAD^ HEAD > changed_files.txt + else + git ls-files > changed_files.txt + fi - # 获取最新提交和上一次提交的差异 - LAST_COMMIT=$(git rev-parse HEAD) - git reset --hard origin/master - CURRENT_COMMIT=$(git rev-parse HEAD) + # 生成绝对路径文件列表 + sed -i "s|^|$WORKSPACE/|" changed_files.txt + echo "CHANGED_FILES=/tmp/gitea_workflow/changed_files.txt" >> $GITHUB_ENV - echo "Syncing changes from $LAST_COMMIT to $CURRENT_COMMIT" + - name: Sync changes + shell: bash + run: | + # 创建目标目录 + sudo mkdir -p /www/wwwroot/front/public - # 获取变更文件并同步 - rsync -av --delete --files-from=<(git diff --name-only $LAST_COMMIT $CURRENT_COMMIT) "$REPO_PATH/" "$WEB_ROOT/" + # 带权限同步(使用sudo保留权限) + sudo rsync -av --chown=www-data:www-data \ + --files-from=$CHANGED_FILES \ + /tmp/gitea_workflow/ \ + /www/wwwroot/front/public/ - echo "Deployment completed!" + # 清理临时文件 + rm -rf /tmp/gitea_workflow \ No newline at end of file