Commit 20b8a97a authored by Steven's avatar Steven

chore: retire outdate scripts

parent be6fc1ca
# This script builds memos for all listed platforms.
# It's only for local builds.
# Before using, setup a proper development environment as described here:
# * https://usememos.com/docs/contribution/development
# * https://github.com/usememos/memos/blob/main/docs/development.md
# Requirements:
# * go
# * node.js
# * npm
# Usage:
# ./scripts/build.ps1
#
# Output: ./build/memos-<os>-<arch>[.exe]
$goBuilds = @(
# "darwin/amd64"
# "darwin/arm64"
# "linux/amd64"
# "linux/arm64"
"windows/amd64"
)
$ldFlags = @(
"-s" # Omit symbol table and debug information
"-w" # Omit DWARF symbol table
)
##
foreach ($dir in @(".", "../")) {
if (Test-Path (Join-Path $dir ".gitignore")) {
$repoRoot = (Resolve-Path $dir).Path
break
}
}
if ([string]::IsNullOrWhiteSpace($repoRoot)) {
Write-Host -BackgroundColor red -ForegroundColor white "Could not find repository root."
Exit 1
}
Write-Host "Repository root: " -NoNewline
Write-Host $repoRoot -f Blue
Push-Location
Set-Location "$repoRoot/web"
if (-not (Get-Command pnpm -ErrorAction SilentlyContinue)) {
Write-Host "Installing pnpm..." -f DarkYellow
npm install -g pnpm
if (!$?) {
Write-Host -BackgroundColor red -ForegroundColor white "Could not install pnpm. See above."
Pop-Location
Exit 1
}
}
Write-Host "`nInstalling frontend dependencies..." -f DarkYellow
pnpm i --frozen-lockfile
if (!$?) {
Write-Host -BackgroundColor red -ForegroundColor white "Could not install frontend dependencies. See above."
Pop-Location
Exit 1
}
Write-Host "Frontend dependencies installed!" -f green
Write-Host "`nRemoving previous frontend build from ./build/dist ..." -f Magenta
Remove-Item "$repoRoot/build/dist" -Recurse -Force -ErrorAction SilentlyContinue
if (!$?) {
Write-Host -BackgroundColor red -ForegroundColor white "Could not remove frontend from ./build/dist. See above."
Pop-Location
Exit 1
}
Write-Host "`nBuilding frontend..." -f DarkYellow
$frontendTime = Measure-Command {
&pnpm build | Out-Host
}
if (!$?) {
Write-Host -BackgroundColor red -ForegroundColor white "Could not build frontend. See above."
Pop-Location
Exit 1
}
else {
Write-Host "Frontend built!" -f green
}
Write-Host "Moving frontend build to ./build/dist..." -f Magenta
Move-Item "$repoRoot/web/dist" "$repoRoot/build/" -Force -ErrorAction Stop
if (!$?) {
Write-Host -BackgroundColor red -ForegroundColor white "Could not move frontend build to ./build/dist. See above."
Pop-Location
Exit 1
}
Set-Location $repoRoot
Write-Host "`nBuilding backend..." -f DarkYellow
$backendTime = Measure-Command {
foreach ($build in $goBuilds) {
$os, $arch = $build.Split("/")
$Env:CGO_ENABLED = 0
$Env:GOOS = $os
$Env:GOARCH = $arch
$output = [IO.Path]::Combine($repoRoot, "build", "memos-$os-$arch")
if ($os -eq "windows") {
$output += ".exe"
}
Write-Host "Building $os/$arch to $output..." -f Blue
&go build -trimpath -o $output -ldflags="$($ldFlags -join " ")" ./bin/memos/main.go | Out-Host
if (!$?) {
Write-Host -BackgroundColor red -ForegroundColor white "'go build' failed for $build ($outputBinary)!. See above."
continue
}
}
}
Write-Host "Backend built!" -f green
Write-Host "`nFrontend build took $($frontendTime.TotalSeconds) seconds." -f Cyan
Write-Host "Backend builds took $($backendTime.TotalSeconds) seconds." -f Cyan
Write-Host "`nBuilds:" -f White
foreach ($build in $goBuilds) {
$output = [IO.Path]::Combine($repoRoot, "build", "memos-$os-$arch")
if ($os -eq "windows") {
$output = "$output.exe"
}
Write-Host $output -f White
}
Write-Host -f Green "`nYou can test the build with" -NoNewline
Write-Host -f White "` ./build/memos-<os>-<arch>" -NoNewline
Write-Host -f DarkGray "`.exe" -NoNewline
Write-Host -f White " --mode demo"
Set-Location -Path $repoRoot
#!/bin/bash
# This script builds memos for all listed platforms.
# It's only for local builds.
# Before using, setup a proper development environment as described here:
# * https://usememos.com/docs/contribution/development
# * https://github.com/usememos/memos/blob/main/docs/development.md
# Requirements:
# * go
# * node.js
# * npm
# Usage:
# chmod +x ./scripts/build.sh
# ./scripts/build.sh
#
# Output: ./build/memos-<os>-<arch>[.exe]
goBuilds=(
# "darwin/amd64"
# "darwin/arm64"
"linux/amd64"
# "linux/arm64"
# "windows/amd64"
)
ldFlags=(
"-s" # Omit symbol table and debug information
"-w" # Omit DWARF symbol table
)
##
find_repo_root() {
# Usage: find_repo_root <file_at_root> <dir1> <dir2> ...
local looking_for="${1:-".gitignore"}"
shift
local default_dirs=("." "../")
local dirs=("${@:-${default_dirs[@]}}")
for dir in "${dirs[@]}"; do
if [ -f "$dir/$looking_for" ]; then
echo $(realpath "$dir")
return
fi
done
}
repo_root=$(find_repo_root)
if [ -z "$repo_root" ]; then
echo -e "\033[0;31mRepository root not found! Exiting.\033[0m"
exit 1
else
echo -e "Repository root: \033[0;34m$repo_root\033[0m"
fi
pushd $repo_root
cd "$repo_root/web"
if ! command -v pnpm &>/dev/null; then
echo -e "\n\033[35mInstalling pnpm...\033[0m"
npm install -g pnpm
if [ $? -ne 0 ]; then
echo -e "\033[0;31mFailed to install pnpm! Exiting.\033[0m"
popd
exit 1
fi
fi
echo -e "\n\033[33mInstalling frontend dependencies...\033[0m"
pnpm i --frozen-lockfile
if [ $? -ne 0 ]; then
echo -e "\033[0;31mFrontend dependencies failed to install! Exiting.\033[0m"
popd
exit 1
fi
echo -e "\033[32mFrontend dependencies installed!\033[0m"
echo -e "\n\033[35mRemoving previous frontend build from ./build/dist...\033[0m"
rm -rf $repo_root/build/dist
if [ $? -ne 0 ]; then
echo -e "\033[93mCould not remove frontend from ./build/dist.\033[0m"
popd
exit 1
fi
echo -e "\n\033[33mBuilding frontend...\033[0m"
pnpm build
if [ $? -ne 0 ]; then
echo -e "\033[0;31mFrontend build failed! Exiting.\033[0m"
popd
exit 1
fi
echo -e "\033[32mFrontend built!\033[0m"
cd $repo_root
echo -e "\033[35mMoving frontend build to ./build/dist...\033[0m"
mv -f "$repo_root/web/dist" "$repo_root/build/"
if [ $? -ne 0 ]; then
echo -e "\033[0;31mFailed to move frontend build! Exiting.\033[0m"
popd
exit 1
fi
cd "$repo_root"
echo -e "\n\033[33mBuilding backend...\033[0m"
for build in "${goBuilds[@]}"; do
os=$(echo $build | cut -d'/' -f1)
arch=$(echo $build | cut -d'/' -f2)
output="$repo_root/build/memos-$os-$arch"
if [ "$os" = "windows" ]; then
output="$output.exe"
fi
CGO_ENABLED=0 GOOS=$os GOARCH=$arch go build -trimpath -ldflags="${ldFlags[*]}" -o "$output" ./bin/memos/main.go
echo -e "\033[34mBuilding $os/$arch to $output...\033[0m"
GOOS=$os GOARCH=$arch go build -ldflags="${ldFlags[*]}" -o "./build/memos-$os-$arch" ./bin/memos/main.go
if [ $? -ne 0 ]; then
echo -e "\033[0;31mgo build failed for $os/$arch($output)! See above.\033[0m"
fi
done
echo -e "\033[32mBackend built!\033[0m"
echo -e "\n\033[37mBuilds:\033[0m"
for build in "${goBuilds[@]}"; do
os=$(echo $build | cut -d'/' -f1)
arch=$(echo $build | cut -d'/' -f2)
output="$repo_root/build/memos-$os-$arch"
if [ "$os" = "windows" ]; then
output="$output.exe"
fi
echo -e "\033[37m$output\033[0m"
done
echo -e "\n\033[32mYou can test the build with \033[37m./build/memos-<os>-<arch>\033[0m\033[90m.exe\033[0m \033[37m--mode demo\033[0m"
cd $repo_root
This diff is collapsed.
# This script starts the backend and frontend in development mode, with live reload.
# It also installs frontend dependencies.
# For more details on setting-up a development environment, check the docs:
# * https://usememos.com/docs/contribution/development
# * https://github.com/usememos/memos/blob/main/docs/development.md
# Usage: ./scripts/start.ps1
foreach ($dir in @(".", "../")) {
if (Test-Path (Join-Path $dir ".gitignore")) {
$repoRoot = (Resolve-Path $dir).Path
break
}
}
##
$frontendPort = 3001
# Tasks to run, in order
$runTasks = @(
@{
Desc = "install frontend dependencies";
Exe = "powershell.exe";
Args = (
"-Command",
"pnpm i"
);
Dir = "$repoRoot/web"
Wait = $true;
},
@{
Desc = "start backend with live reload";
Exe = "air.exe";
Args = (
"-c",
".\scripts\.air-windows.toml"
);
Dir = "$repoRoot";
Wait = $false;
},
@{
Desc = "start frontend with live reload";
Exe = "powershell.exe";
Args = (
"-Command",
"pnpm dev"
);
Dir = "$repoRoot/web";
Wait = $false;
}
)
##
if (!$repoRoot) {
Write-Host "Could not find repository root!" -f Red
Write-Host "cd into the repository root and run the script again."
Exit 1
}
Write-Host "Repository root is $repoRoot"
Write-Host "Starting development environment...`n"
Write-Host @"
███╗ ███╗███████╗███╗ ███╗ ██████╗ ███████╗
████╗ ████║██╔════╝████╗ ████║██╔═══██╗██╔════╝
██╔████╔██║█████╗ ██╔████╔██║██║ ██║███████╗
██║╚██╔╝██║██╔══╝ ██║╚██╔╝██║██║ ██║╚════██║
██║ ╚═╝ ██║███████╗██║ ╚═╝ ██║╚██████╔╝███████║
╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ ╚═════╝ ╚══════╝
"@
function Stop-ProcessTree {
Param([int]$ParentProcessId)
if (!$ParentProcessId) {
Write-Host "Stop-ProcessTree: unspecified ParentProcessId!" -f Red
return
}
Write-Host "Terminating pid $($ParentProcessId) with all its child processes" -f DarkGray
Get-CimInstance Win32_Process | Where-Object {
$_.ParentProcessId -eq $ParentProcessId
} | ForEach-Object {
Stop-ProcessTree $_.ProcessId
}
Stop-Process -Id $ParentProcessId -ErrorAction SilentlyContinue
}
$maxDescLength = ( $runTasks | ForEach-Object { $_.Desc.Length } | Measure-Object -Maximum).Maximum
$spawnedPids = @()
foreach ($task in $runTasks) {
Write-Host ("Running task ""$($task.Desc)""...").PadRight($maxDescLength + 20) -f Blue -NoNewline
$task.Dir = (Resolve-Path $task.Dir).Path
try {
$process = Start-Process -PassThru -WorkingDirectory $task.Dir -FilePath $task.Exe -ArgumentList $task.Args -Wait:$task.Wait
if ($process.ExitCode -and $process.ExitCode -ne 0) {
# ExitCode only works for processes started with -Wait:$true
throw "Process exited with code $($process.ExitCode)"
}
Write-Host "[OK]" -f Green
$spawnedPids += $process.Id
}
catch {
Write-Host "[FAILED]" -f Red
Write-Host "Error: $_" -f Red
Write-Host "Unable to execute: $($task.Exe) $($task.Args)" -f Red
Write-Host "Process working directory: $($task.Dir)" -f Red
foreach ($spawnedPid in $spawnedPids) {
Stop-ProcessTree -ParentProcessId $spawnedPid
}
Exit $process.ExitCode
}
}
Write-Host "Front-end should be accessible at:" -f Green
$ipAddresses = (Get-NetIPAddress -AddressFamily IPv4) | Select-Object -ExpandProperty IPAddress | Sort-Object
$ipAddresses += "localhost"
foreach ($ip in $ipAddresses) {
Write-Host "· http://$($ip):$($frontendPort)" -f Cyan
}
Write-Host "`nPress" -NoNewline
Write-Host " Ctrl + C" -f DarkYellow -NoNewline
Write-Host " or" -NoNewline
Write-Host " Esc" -f DarkYellow -NoNewline
Write-Host " to terminate running servers." -f DarkYellow
[Console]::TreatControlCAsInput = $true
$lastPoll = 0
$noWaitTasks = $runTasks | Where-Object { $_.Wait -eq $false }
while ($true) {
if ([Console]::KeyAvailable) {
$readkey = [Console]::ReadKey("AllowCtrlC,IncludeKeyUp,NoEcho")
if ($readkey.Modifiers -eq "Control" -and $readkey.Key -eq "C") {
break
}
if ($readkey.Key -eq "Escape") {
Break
}
}
# Poll for processes that exited unexpectedly
# Do this every 5 seconds to avoid excessive CPU usage
if (([DateTimeOffset]::UtcNow.ToUnixTimeMilliseconds() - $lastPoll) -ge 5000) {
$noWaitTasks | ForEach-Object {
$name = $_.Exe.TrimEnd(".exe")
if (!(Get-Process -Name $name -ErrorAction SilentlyContinue)) {
Write-Host "Process " -f Red -NoNewline
Write-Host $name -NoNewline -f DarkYellow
Write-Host " is not running anymore!" -f Red
break
}
}
$lastPoll = [DateTimeOffset]::UtcNow.ToUnixTimeMilliseconds()
}
Start-Sleep -Milliseconds 500
}
foreach ($spawnedPid in $spawnedPids) {
Stop-ProcessTree -ParentProcessId $spawnedPid
}
Write-Host "Exiting..."
#!/bin/bash
# Usage: ./scripts/start.sh
set -e
cd "$(dirname "$0")/../"
air -c ./scripts/.air.toml
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment