summarylogtreecommitdiffstats
path: root/PKGBUILD
blob: b411506d47c1e4f351ff6638d5e78896dfd32bbb (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
# vim: set ft=sh ts=4 sw=4 et:
# Maintainer: Dan Fuhry <dan@fuhry.com>

pkgname=('coder')
pkgver=2.15.0
pkgrel=1
pkgdesc="Provision remote development environments via Terraform"
arch=('i386' 'x86_64' 'armv7h' 'aarch64')
url="https://github.com/coder/coder"
license=('AGPL-3.0')
depends=('glibc')
makedepends=('go>=1.22.0')

source=("${pkgname}-${pkgver}.tar.gz::https://github.com/coder/coder/archive/refs/tags/v${pkgver}.tar.gz")
sha512sums=('8588ed75ce1a522215dba680b515cdf7bfb63abcc08c325805bef5ae221e2cab5c8d8263bd9db2fff4c9b7ba478238029510c408b076c8656e7e8934d6d24654')

determine_goarch() {
    case "${CARCH}" in
        amd64|x86_64)
            build_arch="amd64" ;;
        arm64|aarch64)
            build_arch="arm64" ;;
        *)
            build_arch="$(go env GOARCH)"
    esac

    echo "${build_arch}"
}

prepare() {
    cd "${srcdir}/${pkgname}-${pkgver}"
    for f in "${source[@]}"; do
        if [ "${f##*.}" = "patch" ]; then
            msg "Aplying patch: ${f}"
            patch -Np1 -i "${srcdir}/${f}"
        fi
    done
}

build() {
    cd "${srcdir}/${pkgname}-${pkgver}"

    export GOPATH="${srcdir}/go"
    export GOCACHE="${srcdir}/go-cache"

    # See: https://wiki.archlinux.org/index.php/Go_package_guidelines
    export CGO_CPPFLAGS="${CPPFLAGS}"
    export CGO_CFLAGS="${CFLAGS}"
    export CGO_CXXFLAGS="${CXXFLAGS}"
    export CGO_LDFLAGS="${LDFLAGS}"
    export GOFLAGS="-buildmode=pie -trimpath -ldflags=-linkmode=external -mod=readonly -modcacherw"

    build_arch="$(determine_goarch)"

    # Generating these mocks tends to fail, but the generated files are committed.
    # Touching them prevents make from trying to recreate them.
    touch coderd/database/dbmock/dbmock.go \
        coderd/database/pubsub/psmock/psmock.go

    # "src" env var is used to override coder source directory, because their build
    # scripts look for .git which is usually the AUR packaging scripts (since we are
    # using release tarballs)
    env CODER_FORCE_VERSION=${pkgver} \
        src="$(pwd)" \
        make build/coder-slim_linux_${build_arch}

    # Make sure go path is writable so it can be cleaned up
    chmod -R u+w "${srcdir}/go"
    chmod -R u+w "${srcdir}/go-cache"
}

package_coder() {
    cd "${srcdir}/${pkgname}-${pkgver}"
    build_arch="$(determine_goarch)"

    install -d -m755 "${pkgdir}/usr/bin"
    install -m755 "build/coder-slim_${pkgver}_linux_${build_arch}" "${pkgdir}/usr/bin/coder"

    install -d -m755 "${pkgdir}/usr/share/licenses/coder"
    install -m644 "LICENSE" "${pkgdir}/usr/share/licenses/coder/LICENSE"
}