summarylogtreecommitdiffstats
path: root/PKGBUILD
blob: 5667d74263e48ac109908440f12e802844709f6d (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
# Maintainer: SteamedFish <steamedfish@hotmail.com>
pkgname=copilot-api
pkgver=0.7.0
pkgrel=1
pkgdesc='Turn GitHub Copilot into OpenAI/Anthropic API compatible server'
arch=('any')
url='https://github.com/ericc-ch/copilot-api'
license=('MIT')
depends=('bun')
optdepends=('xsel: clipboard support for manual usage')
install="$pkgname.install"
source=("$pkgname-$pkgver.tar.gz::https://github.com/ericc-ch/$pkgname/archive/v$pkgver.tar.gz"
        "$pkgname.service"
        "$pkgname.sysusers"
        "$pkgname.tmpfiles")
sha256sums=('d068030271b917c9f59e21dda4dbd36840372160efa1b1f0598e35dc277689de'
            'a7004c6615c495e2de12b63bf6babd5e44a45c75302d0038bccae7698508e403'
            '0f92b16903a63303768377725ea7f73f253221ef0cb42e08cc8bacf0d8cd17d1'
            'aa2a9bd994a6b258b09d9d9efc9d9cb5429bd5378855ca2a53ad18c3ac7b0558')

build() {
    cd "$srcdir/$pkgname-$pkgver"
    
    # Install dependencies, build, then prune devDependencies
    bun install --frozen-lockfile
    bun run build
    # Nuke node_modules, then reinstall production deps only
    rm -rf node_modules
    bun install --frozen-lockfile --production --ignore-scripts
}

package() {
    cd "$srcdir/$pkgname-$pkgver"
    
    # Create installation directories
    install -dm755 "$pkgdir/usr/lib/$pkgname"
    install -dm755 "$pkgdir/usr/bin"
    
    # Install built files
    cp -r dist/* "$pkgdir/usr/lib/$pkgname/"
    cp -r node_modules "$pkgdir/usr/lib/$pkgname/"
    cp package.json "$pkgdir/usr/lib/$pkgname/"
    
    # Fix shebang to use bun instead of node
    sed -i '1s|.*|#!/usr/bin/env bun|' "$pkgdir/usr/lib/$pkgname/main.js"

    # Remove standalone node CLI scripts that are not used at runtime
    rm -f "$pkgdir/usr/lib/$pkgname/node_modules/is-inside-container/cli.js"
    rm -f "$pkgdir/usr/lib/$pkgname/node_modules/is-docker/cli.js"
    rm -f "$pkgdir/usr/lib/$pkgname/node_modules/which/bin/node-which"
    rm -f "$pkgdir/usr/lib/$pkgname/node_modules/srvx/bin/srvx.mjs"
    # Remove broken symlinks and empty .bin dir left by cli removal
    rm -f "$pkgdir/usr/lib/$pkgname/node_modules/.bin/is-docker"
    rm -f "$pkgdir/usr/lib/$pkgname/node_modules/.bin/is-inside-container"
    rm -f "$pkgdir/usr/lib/$pkgname/node_modules/.bin/node-which"
    rm -f "$pkgdir/usr/lib/$pkgname/node_modules/.bin/srvx"
    rmdir "$pkgdir/usr/lib/$pkgname/node_modules/.bin" 2>/dev/null || true
    rmdir --ignore-fail-on-non-empty "$pkgdir/usr/lib/$pkgname/node_modules/which/bin"
    rmdir --ignore-fail-on-non-empty "$pkgdir/usr/lib/$pkgname/node_modules/srvx/bin"
    
    # Remove bundled xsel - clipboardy auto-detects system xsel from PATH
    rm -f "$pkgdir/usr/lib/$pkgname/node_modules/clipboardy/fallbacks/linux/xsel"
    # Remove Windows clipboard fallbacks - not needed on Linux
    rm -rf "$pkgdir/usr/lib/$pkgname/node_modules/clipboardy/fallbacks/windows"
    # Clean up any empty fallback dirs
    find "$pkgdir/usr/lib/$pkgname/node_modules/clipboardy/fallbacks" \
        -type d -empty -delete 2>/dev/null || true
    # Create wrapper script
    cat > "$pkgdir/usr/bin/$pkgname" << 'EOF'
#!/bin/sh
exec bun run /usr/lib/copilot-api/main.js "$@"
EOF
    chmod 755 "$pkgdir/usr/bin/$pkgname"
    
    # Install license
    install -Dm644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE"
    
    # Install documentation
    install -Dm644 README.md "$pkgdir/usr/share/doc/$pkgname/README.md"

    # Install systemd service
    install -Dm644 "$srcdir/$pkgname.service" \
        "$pkgdir/usr/lib/systemd/system/$pkgname.service"

    # Install sysusers.d config
    install -Dm644 "$srcdir/$pkgname.sysusers" \
        "$pkgdir/usr/lib/sysusers.d/$pkgname.conf"

    # Install tmpfiles.d config (creates /var/lib/copilot-api on package install)
    install -Dm644 "$srcdir/$pkgname.tmpfiles" \
        "$pkgdir/usr/lib/tmpfiles.d/$pkgname.conf"
}