atualização para liberação do arquivo, sempre que baixá-lo

This commit is contained in:
Ricardo Sardá
2025-08-21 16:36:56 -03:00
parent 5bd037dc8e
commit 32582b7b2b

View File

@@ -2,29 +2,34 @@
Atualiza C:\PilotDownloads\ com o conteúdo do repositório (branch main)
https://gitea.magicis.com.br/PilotSupport/vlt-install e executa pilot_install.ps1
Recursos:
- Instala/atualiza Git via winget
- Evita abrir navegador (sem prompts do GCM)
- Suporte a token do Gitea (param ou arquivo)
- Copia por cima (não espelha)
Ajuste as variáveis $GitUser e $GitToken conforme necessário.
#>
param(
[string]$GitUser, # opcional: usuário do Gitea
[string]$GitToken, # opcional: PAT do Gitea
[string]$GitTokenPath # opcional: caminho de arquivo contendo somente o token
)
# ========= CONFIGURAÇÃO DE USUÁRIO/TOKEN =========
$GitUser = "ricardo.sarda" # coloque aqui seu usuário do Gitea
$GitToken = "d6504f7d969c77a51dcbd5854a1f37f0a96398cd" # coloque aqui o Personal Access Token do Gitea
# ================================================
$ErrorActionPreference = 'Stop'
# ===== Auto-desbloqueio (MOTW) =====
try {
$scriptPath = $MyInvocation.MyCommand.Path
if ($scriptPath -and (Test-Path -LiteralPath $scriptPath)) {
Unblock-File -LiteralPath $scriptPath -ErrorAction SilentlyContinue
# remove explicitamente o ADS se existir (não falha se não existir)
Remove-Item -LiteralPath "$scriptPath`:Zone.Identifier" -Force -ErrorAction SilentlyContinue
}
} catch {}
# ===== Configurações =====
$RepoUrl = 'https://gitea.magicis.com.br/PilotSupport/vlt-install' # sem credenciais na URL
$RepoUrl = 'https://gitea.magicis.com.br/PilotSupport/vlt-install'
$Branch = 'main'
$TargetDir = 'C:\PilotDownloads'
$WorkDir = Join-Path $env:TEMP 'vlt-install_repo'
$CopyLog = Join-Path $env:TEMP 'vlt-install_copy.log'
# ===== Utilitárias =====
function Write-Info($m){ Write-Host "[INFO ] $m" -ForegroundColor Cyan }
function Write-Ok($m) { Write-Host "[ OK ] $m" -ForegroundColor Green }
function Write-Warn($m){ Write-Host "[WARN ] $m" -ForegroundColor Yellow }
@@ -40,17 +45,16 @@ function Test-Winget { [bool](Get-Command winget -ErrorAction SilentlyContinue)
function Ensure-Git-WithWinget {
if (-not (Test-Winget)) {
Write-Err "winget não encontrado. Instale o 'App Installer' pela Microsoft Store para habilitar o winget."
Write-Err "winget não encontrado. Instale o 'App Installer' da Microsoft Store."
throw "winget ausente"
}
Write-Info "Verificando Git via winget..."
$argsCommon = @('--accept-package-agreements','--accept-source-agreements','--silent')
# Detecta se Git está instalado
$gitInstalled = $false
try {
$list = winget list --id Git.Git -e @argsCommon 2>$null
$list = winget list --id Git.Git -e 2>$null
if ($list -match 'Git\s+Git') { $gitInstalled = $true }
} catch { }
@@ -62,7 +66,6 @@ function Ensure-Git-WithWinget {
& winget install --id Git.Git -e @argsCommon | Out-Null
}
# Garante PATH do git
if (-not (Get-Command git -ErrorAction SilentlyContinue)) {
$maybeGit = 'C:\Program Files\Git\cmd\git.exe'
if (Test-Path $maybeGit) { $env:Path = "C:\Program Files\Git\cmd;$env:Path" }
@@ -73,17 +76,6 @@ function Ensure-Git-WithWinget {
Write-Ok "Git pronto: $ver"
}
function Get-GitTokenEffective {
if ($GitToken) { return $GitToken }
if ($GitTokenPath) {
if (-not (Test-Path -LiteralPath $GitTokenPath)) {
throw "Arquivo de token não encontrado: $GitTokenPath"
}
return (Get-Content -LiteralPath $GitTokenPath -Raw).Trim()
}
return $null
}
function Get-BasicAuthHeader([string]$user,[string]$token){
if (-not $user -or -not $token) { return $null }
$bytes = [Text.Encoding]::ASCII.GetBytes("$user`:$token")
@@ -94,47 +86,32 @@ function Get-BasicAuthHeader([string]$user,[string]$token){
function Get-GitCommonArgs {
param([string]$AuthHeader)
# Evita prompts/UI/navegador e askpass
$args = @(
'-c','credential.helper=',
'-c','credential.interactive=never',
'-c','core.askPass='
)
# Se fornecer header, usa-o nesta chamada (não grava no .git/config)
if ($AuthHeader) {
$args += @('-c',"http.extraHeader=$AuthHeader")
}
return ,$args
}
# ===== Início =====
try {
# Auto-desbloqueia este arquivo (elimina marca de internet se houver)
try { Unblock-File -LiteralPath $MyInvocation.MyCommand.Path -ErrorAction SilentlyContinue } catch { }
Ensure-Git-WithWinget
Ensure-Dir $TargetDir
# Prepara credenciais (opcionais)
$EffectiveToken = Get-GitTokenEffective
if ($GitUser -and -not $EffectiveToken) {
Write-Warn "GitUser informado mas nenhum token fornecido. Continuação sem autenticação."
}
$AuthHeader = $null
if ($GitUser -and $EffectiveToken) {
$AuthHeader = Get-BasicAuthHeader -user $GitUser -token $EffectiveToken
Write-Info "Usando autenticação via header (sem gravar credenciais em .git/config)."
if ($GitUser -and $GitToken) {
$AuthHeader = Get-BasicAuthHeader -user $GitUser -token $GitToken
Write-Info "Usando autenticação com header."
}
# Nunca abrir prompts/navegador
$env:GIT_TERMINAL_PROMPT = '0'
# Clone/Update
if (Test-Path (Join-Path $WorkDir '.git')) {
Write-Info "Atualizando repositório em $WorkDir ..."
Push-Location $WorkDir
try { & git (Get-GitCommonArgs -AuthHeader $AuthHeader) remote set-url origin $RepoUrl | Out-Null } catch { }
& git (Get-GitCommonArgs -AuthHeader $AuthHeader) fetch --all --prune
& git (Get-GitCommonArgs -AuthHeader $AuthHeader) checkout $Branch
& git (Get-GitCommonArgs -AuthHeader $AuthHeader) reset --hard "origin/$Branch"
@@ -147,7 +124,6 @@ try {
Write-Ok "Clone concluído."
}
# Copiar por cima (sem espelhar)
Write-Info "Copiando arquivos para $TargetDir (sem espelhar)..."
$rc = robocopy `
$WorkDir `
@@ -165,7 +141,6 @@ try {
Write-Ok "Cópia finalizada. (código robocopy: $LASTEXITCODE) Log: $CopyLog"
}
# Executa o instalador
$InstallScript = Join-Path $TargetDir 'pilot_install.ps1'
if (Test-Path -LiteralPath $InstallScript) {
Write-Info "Executando $InstallScript ..."
@@ -190,6 +165,5 @@ try {
Write-Err ("Erro: " + $_.Exception.Message)
exit 1
} finally {
# Limpa variáveis sensíveis do ambiente
Remove-Item Env:\GIT_TERMINAL_PROMPT -ErrorAction SilentlyContinue
}