75 lines
2.1 KiB
PowerShell
75 lines
2.1 KiB
PowerShell
<#
|
|
.SYNOPSIS
|
|
Build an XPI from the repository contents.
|
|
|
|
.DESCRIPTION
|
|
- Reads the version from manifest.json.
|
|
- Packages the repo while excluding build scripts, release output, and local editor folders.
|
|
- Writes the finished XPI to release/.
|
|
#>
|
|
|
|
$ScriptDir = Split-Path $MyInvocation.MyCommand.Path
|
|
$ReleaseDir = Join-Path $ScriptDir 'release'
|
|
$Manifest = Join-Path $ScriptDir 'manifest.json'
|
|
|
|
if (-not (Test-Path $Manifest)) {
|
|
Write-Error "manifest.json not found at $Manifest"
|
|
exit 1
|
|
}
|
|
|
|
if (-not (Test-Path $ReleaseDir)) {
|
|
New-Item -ItemType Directory -Path $ReleaseDir | Out-Null
|
|
}
|
|
|
|
$version = (Get-Content $Manifest -Raw | ConvertFrom-Json).version
|
|
if (-not $version) {
|
|
Write-Error "No version found in manifest.json"
|
|
exit 1
|
|
}
|
|
|
|
$artifactBase = "psitransfer-filelink-$version"
|
|
$zipPath = Join-Path $ReleaseDir "$artifactBase.zip"
|
|
$xpiPath = Join-Path $ReleaseDir "$artifactBase.xpi"
|
|
|
|
Remove-Item -Path $zipPath, $xpiPath -Force -ErrorAction SilentlyContinue
|
|
|
|
$allFiles = Get-ChildItem -Path $ScriptDir -Recurse -File |
|
|
Where-Object {
|
|
$_.Extension -notin '.ps1', '.sh' -and
|
|
$_.FullName -notmatch '\\release\\' -and
|
|
$_.FullName -notmatch '\\.git\\' -and
|
|
$_.FullName -notmatch '\\.idea\\' -and
|
|
$_.FullName -notmatch '\\.vscode\\'
|
|
}
|
|
|
|
if ($allFiles.Count -eq 0) {
|
|
Write-Error "No files found to package."
|
|
exit 1
|
|
}
|
|
|
|
foreach ($file in $allFiles) {
|
|
$size = (Get-Item $file.FullName).Length
|
|
$rel = $file.FullName.Substring($ScriptDir.Length + 1).TrimStart('\')
|
|
$entryName = $rel.Replace('\', '/')
|
|
Write-Host "Zipping: $entryName <- $($file.FullName) ($size bytes)"
|
|
}
|
|
|
|
Add-Type -AssemblyName System.IO.Compression.FileSystem
|
|
|
|
$zip = [System.IO.Compression.ZipFile]::Open($zipPath, 'Create')
|
|
foreach ($file in $allFiles) {
|
|
$rel = $file.FullName.Substring($ScriptDir.Length + 1).TrimStart('\')
|
|
$entryName = $rel.Replace('\', '/')
|
|
|
|
[System.IO.Compression.ZipFileExtensions]::CreateEntryFromFile(
|
|
$zip,
|
|
$file.FullName,
|
|
$entryName,
|
|
[System.IO.Compression.CompressionLevel]::Optimal
|
|
)
|
|
}
|
|
$zip.Dispose()
|
|
|
|
Rename-Item -Path $zipPath -NewName "$artifactBase.xpi" -Force
|
|
|
|
Write-Host "Built XPI at: $xpiPath"
|