feat(deploy): add sync and push scripts for CI/CD

This commit is contained in:
Arash_M
2026-06-09 15:33:50 +03:30
parent 12f950d786
commit 02573f1643
3 changed files with 147 additions and 0 deletions
+41
View File
@@ -0,0 +1,41 @@
# Deploy — audio-voice-converter
اسکریپت‌های CI/CD پروژه `audio-voice-converter`.
## ساختار
```
deploy/
├── README.md ← این فایل
└── scripts/
├── sync.ps1 ← کپی فایل‌ها از source به repo
└── push.ps1 ← git commit + push به Gitea
```
## پیش‌نیازها
- متغیر محیطی `AUDIO_SOURCE_ROOT` تنظیم شده باشه (مسیر پوشه‌ی source)
- دسترسی git به remote (credential یا SSH key)
```powershell
$env:AUDIO_SOURCE_ROOT = "D:\projects\google_meet_captions"
```
## استفاده
```powershell
# فقط sync (کپی فایل‌ها بدون push)
.\scripts\sync.ps1
# sync + commit + push
.\scripts\sync.ps1 | .\scripts\push.ps1
# یا مستقیم push (اگر sync قبلاً انجام شده)
.\scripts\push.ps1
```
## جریان کلی
```
source dirs → sync.ps1 → repo files → push.ps1 → Gitea
```
+56
View File
@@ -0,0 +1,56 @@
<#
.SYNOPSIS
Git commit + push to Gitea (no sensitive data; credentials come from git config or env).
.DESCRIPTION
Stages all changes, commits with a timestamp message, and force-pushes to origin/main.
Run from the repo root or any subdirectory.
Remote URL is whatever `git remote get-url origin` returns — configure it once:
git remote set-url origin https://<user>@<host>/arash/audio-voice-converter.git
.PARAMETER Message
Optional commit message. Defaults to "chore: sync extension files <timestamp>".
.PARAMETER DryRun
Show what would be committed/pushed without actually doing it.
.EXAMPLE
.\deploy\scripts\push.ps1
.\deploy\scripts\push.ps1 -Message "feat: update popup UI"
.\deploy\scripts\push.ps1 -DryRun
#>
[CmdletBinding()]
param(
[string]$Message,
[switch]$DryRun
)
$ErrorActionPreference = "Stop"
# Navigate to repo root (2 levels up from deploy/scripts/)
$repoRoot = Split-Path (Split-Path $PSScriptRoot)
Set-Location $repoRoot
$status = git status --porcelain
if (-not $status) {
Write-Host "Nothing to commit."
exit 0
}
$msg = if ($Message) { $Message } else { "chore: sync extension files $(Get-Date -Format 'yyyy-MM-dd HH:mm')" }
Write-Host "Changes to commit:"
git status --short
if ($DryRun) {
Write-Host "[DryRun] Would commit: $msg"
Write-Host "[DryRun] Would push: origin main (force)"
exit 0
}
git add .
git commit -m $msg
git push --force origin main
Write-Host "Push complete."
+50
View File
@@ -0,0 +1,50 @@
<#
.SYNOPSIS
Sync extension source files into this repo (no git operations).
.DESCRIPTION
Copies the latest files from the source directories into the repo.
Source root is read from $env:AUDIO_SOURCE_ROOT (no sensitive data in this script).
Source layout expected under $env:AUDIO_SOURCE_ROOT:
Google Meet Transcripts & AI Summary/ -> google-meet-transcripts-extension/
caption-extension/ -> caption-extension/
.EXAMPLE
$env:AUDIO_SOURCE_ROOT = "D:\projects\google_meet_captions"
.\deploy\scripts\sync.ps1
#>
[CmdletBinding()]
param()
$ErrorActionPreference = "Stop"
$sourceRoot = $env:AUDIO_SOURCE_ROOT
if (-not $sourceRoot) {
Write-Error "Set `$env:AUDIO_SOURCE_ROOT` to the google_meet_captions folder before running."
}
$repoRoot = Split-Path (Split-Path $PSScriptRoot) # deploy/scripts -> repo root
$mappings = @(
@{
From = Join-Path $sourceRoot "Google Meet Transcripts & AI Summary"
To = Join-Path $repoRoot "google-meet-transcripts-extension"
},
@{
From = Join-Path $sourceRoot "caption-extension"
To = Join-Path $repoRoot "caption-extension"
}
)
foreach ($m in $mappings) {
if (-not (Test-Path $m.From)) {
Write-Warning "Source not found, skipping: $($m.From)"
continue
}
Write-Host "Syncing $($m.From) -> $($m.To)"
New-Item -ItemType Directory -Force -Path $m.To | Out-Null
Copy-Item "$($m.From)\*" $m.To -Recurse -Force
}
Write-Host "Sync complete."