summarylogtreecommitdiffstats
path: root/PKGBUILD
blob: 8f48eae92591aba8990346eb528bdf547ff5696b (plain)
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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
# Contributor: Michael Hansen <zrax0111 gmail com>
# Contributor: Francisco Magalhães <franmagneto gmail com>
# Contributor: Filipe Laíns (FFY00) <lains@archlinux.org>

_pkgname=code
pkgname=code-git
pkgdesc='OSS version of Visual Studio Code editor'
pkgver=1.102.0.r1.gc6e8ac1
pkgrel=1
arch=('x86_64')
url='https://github.com/microsoft/vscode'
license=('MIT')
_electron=electron
depends=( $_electron ripgrep xdg-utils
libsecret libxkbfile )
optdepends=('x11-ssh-askpass: SSH authentication')
makedepends=( nodejs-lts-jod # see .nvmrc
git npm python desktop-file-utils libarchive curl)
conflicts=(code vscode)
provides=(code vscode)
options=(!strip) # for sign of ext
# use depth=1
source=('https://gitlab.archlinux.org/archlinux/packaging/packages/code/-/raw/main/'{code.sh,code.mjs,clipath.patch,product_json.diff})
sha256sums=('SKIP'{,,,}) # should we have cksums ?

pkgver() {
  cd vscode
  printf "%s.r%s.g%s" \
    $(awk 'match($0,/"version":\s*"([^"]+)"/,v) {print v[1]}' package.json) \
    $(git rev-list --count HEAD) $(git rev-parse --short HEAD)
}

prepare() {
  rm -rf vscode
  git clone --depth=1 ${url}.git vscode
  cd vscode
  
  # electron version
  _electronver=$(npm pkg get devDependencies.electron)
  echo Replacing $_electronver
  _electronver=$(cat /usr/lib/${_electron}/version)
  npm pkg set devDependencies.electron=${_electronver} # unneeded ?
  sed -i "s/^target=.*/target=\"${_electronver/}\"/" .npmrc # native modules
  echo with $(rg -N 'target' .npmrc)

  # Launcher
  sed -e "s|name=electron|name=$_electron |" -e '/PKGBUILD/d' -i ../code.sh
  sed "1s|.*|#!/usr/lib/$_electron/electron|" -i ../code.mjs

  patch -p0 -i ../product_json.diff # https://github.com/Microsoft/vscode/issues/31168 for details.

  # Set the commit and build date
  sed -e "s/@COMMIT@/$(git rev-parse HEAD)/" -i product.json

  # Appdata and desktop file
  sed -i 's|/usr/share/@@NAME@@/@@NAME@@|@@NAME@@|g
          s|@@NAME_SHORT@@|Code|g
          s|@@NAME_LONG@@|Code - OSS|g
          s|@@NAME@@|code-oss|g
          s|@@ICON@@|com.visualstudio.code.oss|g
          s|@@EXEC@@|code-oss|g
          s|@@LICENSE@@|MIT|g
          s|@@URLPROTOCOL@@|vscode|g' \
          resources/linux/code{.appdata.xml,.desktop,-url-handler.desktop}

  desktop-file-edit --set-key StartupWMClass --set-value code-oss resources/linux/code.desktop

  cp resources/linux/{code,code-oss}-url-handler.desktop
  desktop-file-edit --set-key MimeType --set-value x-scheme-handler/code-oss resources/linux/code-oss-url-handler.desktop

  # shell completions
  cp resources/completions/bash/code resources/completions/bash/code-oss
  cp resources/completions/zsh/_code resources/completions/zsh/_code-oss
  # Patch completions with correct names
  sed -i 's|@@APPNAME@@|code|g' resources/completions/{bash/code,zsh/_code}
  sed -i 's|@@APPNAME@@|code-oss|g' resources/completions/{bash/code-oss,zsh/_code-oss}

  patch -p1 -i "$srcdir/clipath.patch"
}

build() {
  cd vscode
  # Don't DL ripgrep
  export TMPDIR="$srcdir"/tmp
  _vsrgver=$(npm pkg get dependencies.@vscode/ripgrep | sed 's/[\"^]//g')
  _rgver=13.0.0-13
  mkdir -p "$TMPDIR"/vscode-ripgrep-cache-$_vsrgver
  touch rg # Archived symlink is replaced
  bsdtar -czf "$TMPDIR"/vscode-ripgrep-cache-${_vsrgver}/ripgrep-v${_rgver}-x86_64-unknown-linux-musl.tar.gz rg
  # Don't DL Electron
  export XDG_CACHE_HOME="$srcdir" HOME="$srcdir"/home # Don't taint user dir
  _cache_dir="$XDG_CACHE_HOME"/electron/$(echo -n "https://github.com/electron/electron/releases/download/v${_electronver}" | sha256sum | cut -d ' ' -f 1)
  mkdir -p "$_cache_dir"
  _zip="electron-v${_electronver}-linux-x64.zip"
  # cd "/usr/lib/$_electron" && zip -r "$_cache_dir/$_zip" . && cd - # broken
  # bsdtar --format zip -cf "${_cache_dir}/${_zip}" /dev/null 2> /dev/null # broken
  # echo "$(sha256sum "$_cache_dir/$_zip" | cut -d " " -f 1) *$_zip" > build/checksums/electron.txt # broken
  curl -L https://github.com/electron/electron/releases/download/v${_electronver}/SHASUMS256.txt -o build/checksums/electron.txt
  export ELECTRON_SKIP_BINARY_DOWNLOAD=1 PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1

  npm install
  npm run gulp vscode-linux-x64 #-min minify cause OOM
}

package() {
  # Resource files
  install -dm755 "$pkgdir"/usr/lib/code
  cp -r --reflink=auto --no-preserve=ownership VSCode-linux-x64/resources/app/* "$pkgdir"/usr/lib/code/
  # system tools
  ln -svf /usr/bin/rg "$pkgdir"/usr/lib/code/node_modules/@vscode/ripgrep/bin/rg
  ln -svf /usr/bin/xdg-open "$pkgdir"/usr/lib/code/node_modules/open/xdg-open
  # Launcher
  install -Dm755 code.sh "$pkgdir"/usr/bin/code
  install -Dm755 code.mjs "$pkgdir"/usr/lib/code/code.mjs
  ln -sf /usr/bin/code "$pkgdir"/usr/bin/code-oss
  # Appdata and desktop file
  install -Dm644 vscode/resources/linux/code.appdata.xml "$pkgdir"/usr/share/metainfo/code-oss.appdata.xml
  install -Dm644 vscode/resources/linux/code.desktop "$pkgdir"/usr/share/applications/code-oss.desktop
  install -Dm644 vscode/resources/linux/code-url-handler.desktop "$pkgdir"/usr/share/applications/code-url-handler.desktop
  install -Dm644 vscode/resources/linux/code-oss-url-handler.desktop "$pkgdir"/usr/share/applications/code-oss-url-handler.desktop
  # SVG icon
  install -d "$pkgdir"/usr/share/icons/hicolor/scalable/apps
  ln -sf /usr/lib/code/out/media/code-icon.svg "$pkgdir"/usr/share/icons/hicolor/scalable/apps/com.visualstudio.code.oss.svg
  # Shell completions
  install -Dm644 vscode/resources/completions/bash/code "$pkgdir"/usr/share/bash-completion/completions/code
  install -Dm644 vscode/resources/completions/bash/code-oss "$pkgdir"/usr/share/bash-completion/completions/code-oss
  install -Dm644 vscode/resources/completions/zsh/_code "$pkgdir"/usr/share/zsh/site-functions/_code
  install -Dm644 vscode/resources/completions/zsh/_code-oss "$pkgdir"/usr/share/zsh/site-functions/_code-oss
  # License
  install -Dm644 VSCode-linux-x64/resources/app/LICENSE.txt "$pkgdir"/usr/share/licenses/${pkgname}/LICENSE
  install -Dm644 VSCode-linux-x64/resources/app/ThirdPartyNotices.txt "$pkgdir"/usr/share/licenses/${pkgname}/ThirdPartyNotices.txt
}