Repository navigation
Expand file tree
/
Copy pathopencode-install.ps1
More file actions
58 lines (52 loc) · 2.23 KB
/
Copy pathopencode-install.ps1
File metadata and controls
58 lines (52 loc) · 2.23 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
################################################################################
#
# opencode-install
#
# Install/Update OpenCode for current user. This also works as a version manager.
# If version is not specified, the latest version will be installed.
#
# Homepage: https://opencode.ai/
#
# Usage:
# opencode-install [<version>]
#
# Example:
# opencode-install
# opencode-install 1.17.17
# opencode-install v1.17.17
#
# MIT License.
# Copyright (C) 2025 Nguyen Nhat Tung.
#
################################################################################
$ErrorActionPreference = "Stop"
Set-StrictMode -Version Latest
# Application info
$PROGRAM_ID = "OpenCode"
# Shared library
. "${PSScriptRoot}\shared\install-common.ps1"
. "${PSScriptRoot}\shared\install-source.ps1"
# Prepare environment
$INSTALL_VERSION = ""
if (${args}.Count -ge 1) {
$INSTALL_VERSION = ${args}[0].ToString()
}
$InstallSrc = Get-InstallSource -ProgramId "${PROGRAM_ID}"
$INSTALL_VERSION = Get-InstallVersionFromGithub -Owner "$($InstallSrc.GithubOwner)" -Repo "$($InstallSrc.GithubRepo)" -FallbackVersion "${INSTALL_VERSION}"
$InstallEnv = Initialize-InstallEnv -ProgramId "${PROGRAM_ID}" -Version "${INSTALL_VERSION}"
# Download and install binaries
if (!(Test-Path "$($InstallEnv.InstallTarget)" -PathType Container)) {
$BIN_ARCH_URI_AMD64 = Get-Amd64Uri -ProgramId "${PROGRAM_ID}" -InstallVersion "${INSTALL_VERSION}"
$BIN_ARCH_URI_ARM64 = Get-Arm64Uri -ProgramId "${PROGRAM_ID}" -InstallVersion "${INSTALL_VERSION}"
$BIN_ARCH_TMP_FILE = "$($InstallEnv.TempTarget).zip"
Download-UriPerArch -Amd64Uri "${BIN_ARCH_URI_AMD64}" -Arm64Uri "${BIN_ARCH_URI_ARM64}" -OutputPath "${BIN_ARCH_TMP_FILE}"
New-Directory2 -Path "$($InstallEnv.TempTarget)"
Extract-Archive -ArchivePath "${BIN_ARCH_TMP_FILE}" -DestinationPath "$($InstallEnv.TempTarget)" -ScriptRoot "${PSScriptRoot}"
Remove-Item2 -Path "${BIN_ARCH_TMP_FILE}"
Move-Item2 -From "$($InstallEnv.TempTarget)" -To "$($InstallEnv.InstallTarget)"
Remove-Item2 -Path "$($InstallEnv.TempTarget)"
}
# Finalize install
Link-Item2 -From "$($InstallEnv.InstallTarget)" -To "$($InstallEnv.ActiveTarget)" -Overwrite
Update-CliinstPath -BinPath "$($InstallEnv.ActiveTarget)" -IsSystemWide $($InstallEnv.IsAdmin)
Finalize-Install