aboutsummaryrefslogtreecommitdiff
path: root/justfile
blob: c58f16636a9d3f97d598eb27047e4267243cbe34 (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
TEMPDIR := `mktemp -d -p $(pwd)`
BUILDDIR := "_build"
ALL_VERSIONS := BUILDDIR / "ALL_VERSIONS"
NEW_VERSION := BUILDDIR / "NEW_VERSION"
CURRENT_VERSION := BUILDDIR / "CURRENT_VERSION"
DEFAULT_REGISTRY := "public.ecr.aws/x2w2w0z4"
COMMIT := `git rev-parse --short HEAD`
TAGS := `git tag -l`

alias dr := debug-run
alias dt := debug-test

default:
  @just --choose

docker-build:
    new_ver=$(cat {{ NEW_VERSION }}); \
        docker build --build-arg="version=$new_ver" -t go-git-server:$new_ver .

docker-run:
    docker run -it --rm -p 8080:8080 --volume $(pwd)/tokens.csv:/opt/app/etc/tokens.csv go-git-server

clean:
    rm -rf {{ BUILDDIR }}

new-ver part="latest": builddir
    #!/usr/bin/env bash
    set -euxo pipefail
    echo "{{ TAGS }}" > {{ ALL_VERSIONS }}
    cat {{ ALL_VERSIONS }} | bumpver --last-version patch - > {{ CURRENT_VERSION }}
    if [[ {{part}} == "latest" ]];
    then
        bumpver patch --prerelease --prerelease-fmt 'latest.$KeyArg commit.$BumpInt' -k commit={{COMMIT}} {{ CURRENT_VERSION }} > {{ NEW_VERSION }}
        git tag $(cat {{ NEW_VERSION }})
    else
        bumpver {{part}} <(git tag -l) > {{ NEW_VERSION }}
    fi

builddir:
    mkdir -p {{ BUILDDIR }}/etc
    mkdir -p {{ BUILDDIR }}/bin
    cp policy.csv auth_model.ini gitserver.yaml {{ BUILDDIR }}/etc/
git-push tag:
    git push origin master
    git push origin {{ tag }}

git-prepare-release:
    #!/usr/bin/env bash
    set -euxo pipefail
    new_ver=$(cat {{ NEW_VERSION }})
    cd manifests/overlays/prod
    sed -i "s@^    app.kubernetes.io/version: [0-9]\.[0-9]\.[0-9]@    app.kubernetes.io/version: $new_ver@g" kustomization.yaml
    kustomize edit set image go-git-server={{ DEFAULT_REGISTRY }}/go-git-server:$new_ver
    git commit kustomization.yaml -m "chore: bump deployment"

git-tag-release:
    #!/usr/bin/env bash
    set -euxo pipefail
    new_ver=$(cat {{ NEW_VERSION }})
    current_ver=$(cat {{ CURRENT_VERSION}})
    # git commit manifests/std/kustomization.yaml -m "chore: bump deployment"
    # temp light weight tag for building release notes
    git tag $new_ver
    echo "v${new_ver} release" > {{ TEMPDIR }}/chglog
    git-chglog $current_ver..$new_ver >> {{ TEMPDIR }}/chglog
    echo "## Coverage" >> {{ TEMPDIR }}/chglog
    echo "" >> {{ TEMPDIR }}/chglog
    go tool cover -func={{ TEMPDIR }}/testcover.out >> {{ TEMPDIR }}/chglog
    # end temp tag
    git tag -d $new_ver
    git tag --annotate --sign --cleanup=whitespace --file {{ TEMPDIR }}/chglog ${new_ver}


release part: test builddir (new-ver part) git-prepare-release docker-build git-tag-release push
    echo "Completed release of {{ NEW_VERSION }}"
    cat {{ TEMPDIR }}/chglog


build version: test builddir
    CGO_ENABLED=0 go build -a -ldflags "-s -X 'main.goGitServerVersion={{version}}'" -o {{ BUILDDIR }}//bin/go-git-server cmd/main.go

push:
    new_ver=$(cat {{ NEW_VERSION }}); \
        just docker-push; \
            just git-push $new_ver
    @echo "pushed to all endpoints"

docker-push registry=DEFAULT_REGISTRY:
    new_ver=$(cat {{ NEW_VERSION }}); \
        docker tag go-git-server:$new_ver {{registry}}/go-git-server:$new_ver; \
            docker push {{registry}}/go-git-server:$new_ver

run repo=(TEMPDIR):
    git clone --bare mgmt {{repo}}/mgmt.git
    go run cmd/main.go -a -r {{repo}}

test:
    golangci-lint run
    TMPDIR=$PWD/testdata go test -v -coverprofile={{ TEMPDIR }}/testcover.out ./...
    go tool cover -func={{ TEMPDIR }}/testcover.out

debug-test pkg func:
    dlv test {{pkg}} -- -test.v -test.run {{func}}

debug-run:
    dlv debug cmd/main.go -- -s {{justfile_directory()}}/gitserver.yaml -r {{ TEMPDIR }} -t tokens.csv -p policy.csv -m auth_model.ini -a

local-build: clean new-ver docker-build (docker-push "localhost:5000")
    #!/usr/bin/env bash
    set -euxo pipefail
    new_ver=$(cat {{ NEW_VERSION }})
    cd manifests/local
    kustomize edit set image go-git-server=go-git-registry:5000/go-git-server:$new_ver

local-clean:
    kustomize build manifests/local | kubectl --context k3d-go-git-cluster delete -f -

local-undeploy:
    kustomize build manifests/base | kubectl --context k3d-go-git-cluster delete -f -
    kustomize build manifests/cgit | kubectl --context k3d-go-git-cluster delete -f -

local-deploy: local-build
    kustomize build manifests/local | kubectl --context k3d-go-git-cluster apply -f -

local-cluster:
    k3d cluster create go-git-cluster --registry-create go-git-registry:5000

local-cluster-clean:
    k3d cluster delete go-git-cluster