-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsqlc-install
More file actions
executable file
·100 lines (89 loc) · 2.98 KB
/
Copy pathsqlc-install
File metadata and controls
executable file
·100 lines (89 loc) · 2.98 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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#!/bin/sh
################################################################################
#
# sqlc-install
#
# Install/Update sqlc for current user. This also works as a version manager.
# If version is not specified, the latest version will be installed.
#
# Homepage: https://sqlc.dev/
#
# Usage:
# sqlc-install [<version>]
#
# Example:
# sqlc-install
# sqlc-install 1.30.0
# sqlc-install v1.30.0
#
# MIT License.
# Copyright (C) 2025 Nguyen Nhat Tung.
#
################################################################################
# Application info
GITHUB_OWNER="sqlc-dev"
GITHUB_REPO="sqlc"
PROGRAM_ID="sqlc"
PROGRAM_EXEC="sqlc"
set -ex
# Determine version to install
if [ -z "$1" ]; then
LATEST_VERSION="$(curl https://api.github.com/repos/${GITHUB_OWNER}/${GITHUB_REPO}/releases/latest | jq -r .tag_name)"
else
LATEST_VERSION="$1"
fi
LATEST_VERSION="${LATEST_VERSION#v}"
# Installation environment
USERID="$(id -u)"
ARCH="$(uname -m)"
if [ "${USERID}" -eq 0 ]; then
INSTALL_ROOT="/usr/local/share/${PROGRAM_ID}"
SYSTEM_BIN_ROOT="/usr/local/bin"
else
INSTALL_ROOT="${HOME}/.local/share/${PROGRAM_ID}"
SYSTEM_BIN_ROOT="${HOME}/.local/bin"
fi
INSTALL_TARGET="${INSTALL_ROOT}/${PROGRAM_ID}-v${LATEST_VERSION}"
ACTIVE_TARGET="${INSTALL_ROOT}/active-release"
if [ ! -d "${INSTALL_ROOT}" ]; then
mkdir -p "${INSTALL_ROOT}"
fi
if [ ! -d "${SYSTEM_BIN_ROOT}" ]; then
mkdir -p "${SYSTEM_BIN_ROOT}"
fi
# Download and install binaries
if [ ! -d "${INSTALL_TARGET}" ]; then
BIN_ARCH_URI_AMD64="https://github.com/${GITHUB_OWNER}/${GITHUB_REPO}/releases/download/v${LATEST_VERSION}/sqlc_${LATEST_VERSION}_linux_amd64.tar.gz"
BIN_ARCH_URI_ARM64="https://github.com/${GITHUB_OWNER}/${GITHUB_REPO}/releases/download/v${LATEST_VERSION}/sqlc_${LATEST_VERSION}_linux_arm64.tar.gz"
BIN_ARCH_TMP_FILE="/tmp/${PROGRAM_ID}-v${LATEST_VERSION}.tar.gz"
if [ "${ARCH}" = "x86_64" ] || [ "${ARCH}" = "amd64" ]; then
curl -fSL "${BIN_ARCH_URI_AMD64}" -o "${BIN_ARCH_TMP_FILE}"
elif [ "${ARCH}" = "aarch64" ] || [ "${ARCH}" = "arm64" ]; then
curl -fSL "${BIN_ARCH_URI_ARM64}" -o "${BIN_ARCH_TMP_FILE}"
else
echo "Unsupported architecture: ${ARCH}"
exit 1
fi
TEMP_TARGET="/tmp/${PROGRAM_ID}-v${LATEST_VERSION}"
mkdir "${TEMP_TARGET}"
tar -x -v -f "${BIN_ARCH_TMP_FILE}" -C "${TEMP_TARGET}"
rm "${BIN_ARCH_TMP_FILE}"
mv "${TEMP_TARGET}" "${INSTALL_TARGET}"
if [ -d "${TEMP_TARGET}" ]; then
rm -r "${TEMP_TARGET}"
fi
fi
# Set active release
if [ -f "${ACTIVE_TARGET}" ] || [ -d "${ACTIVE_TARGET}" ] || [ -L "${ACTIVE_TARGET}" ]; then
rm -r "${ACTIVE_TARGET}"
fi
ln -s "${INSTALL_TARGET}" "${ACTIVE_TARGET}"
# Create symlink for quick access
ACTIVE_TARGET_BIN="${ACTIVE_TARGET}/${PROGRAM_EXEC}"
SYSTEM_BIN_TARGET_BIN="${SYSTEM_BIN_ROOT}/${PROGRAM_ID}"
if [ -f "${ACTIVE_TARGET_BIN}" ]; then
if [ -f "${SYSTEM_BIN_TARGET_BIN}" ] || [ -d "${SYSTEM_BIN_TARGET_BIN}" ] || [ -L "${SYSTEM_BIN_TARGET_BIN}" ]; then
rm -r "${SYSTEM_BIN_TARGET_BIN}"
fi
ln -s "${ACTIVE_TARGET_BIN}" "${SYSTEM_BIN_TARGET_BIN}"
fi