re-wrap all bundle invocations with flock refs #18770
[arvados.git] / tools / arvbox / lib / arvbox / docker / service / gitolite / run-service
1 #!/bin/bash
2 # Copyright (C) The Arvados Authors. All rights reserved.
3 #
4 # SPDX-License-Identifier: AGPL-3.0
5
6 exec 2>&1
7 set -eux -o pipefail
8
9 . /usr/local/lib/arvbox/common.sh
10
11 if test "$1" != "--only-deps" ; then
12   while [ ! -f $ARVADOS_CONTAINER_PATH/api.ready ]; do
13     sleep 1
14   done
15 fi
16
17 mkdir -p $ARVADOS_CONTAINER_PATH/git
18
19 export ARVADOS_API_HOST=$localip:${services[controller-ssl]}
20 export ARVADOS_API_HOST_INSECURE=1
21 export ARVADOS_API_TOKEN=$(cat $ARVADOS_CONTAINER_PATH/superuser_token)
22
23 export USER=git
24 export USERNAME=git
25 export LOGNAME=git
26 export HOME=$ARVADOS_CONTAINER_PATH/git
27
28 cd ~arvbox
29
30 mkdir -p ~arvbox/.ssh ~git/.ssh
31 chmod 0700 ~arvbox/.ssh ~git/.ssh
32
33 if ! test -s ~arvbox/.ssh/id_rsa ; then
34     ssh-keygen -t rsa -P '' -f .ssh/id_rsa
35     cp ~arvbox/.ssh/id_rsa ~arvbox/.ssh/id_rsa.pub ~git/.ssh
36 fi
37
38 if test -s ~arvbox/.ssh/known_hosts ; then
39     ssh-keygen -f ".ssh/known_hosts" -R localhost
40 fi
41
42 if ! test -f $ARVADOS_CONTAINER_PATH/gitolite-setup ; then
43     cd ~git
44
45     # Do a no-op login to populate known_hosts
46     # with the hostkey, so it won't try to ask
47     # about it later.
48     cp .ssh/id_rsa.pub .ssh/authorized_keys
49     ssh -o stricthostkeychecking=no git@localhost true
50     rm .ssh/authorized_keys
51
52     cp /usr/local/lib/arvbox/gitolite.rc .gitolite.rc
53
54     gitolite setup -pk .ssh/id_rsa.pub
55
56     if ! test -d gitolite-admin ; then
57         git clone git@localhost:gitolite-admin
58     fi
59
60     cd gitolite-admin
61     git config user.email arvados
62     git config user.name arvados
63     git config push.default simple
64     git push
65
66     touch $ARVADOS_CONTAINER_PATH/gitolite-setup
67 else
68     # Do a no-op login to populate known_hosts
69     # with the hostkey, so it won't try to ask
70     # about it later.  Don't run anything,
71     # get the default gitolite behavior.
72     ssh -o stricthostkeychecking=no git@localhost
73 fi
74
75 prefix=$(arv --format=uuid user current | cut -d- -f1)
76
77 if ! test -s $ARVADOS_CONTAINER_PATH/arvados-git-uuid ; then
78     repo_uuid=$(arv --format=uuid repository create --repository "{\"owner_uuid\":\"$prefix-tpzed-000000000000000\", \"name\":\"arvados\"}")
79     echo $repo_uuid > $ARVADOS_CONTAINER_PATH/arvados-git-uuid
80 fi
81
82 repo_uuid=$(cat $ARVADOS_CONTAINER_PATH/arvados-git-uuid)
83
84 if ! test -s $ARVADOS_CONTAINER_PATH/arvados-git-link-uuid ; then
85     all_users_group_uuid="$prefix-j7d0g-fffffffffffffff"
86
87     set +e
88     read -rd $'\000' newlink <<EOF
89 {
90  "tail_uuid":"$all_users_group_uuid",
91  "head_uuid":"$repo_uuid",
92  "link_class":"permission",
93  "name":"can_read"
94 }
95 EOF
96     set -e
97     link_uuid=$(arv --format=uuid link create --link "$newlink")
98     echo $link_uuid > $ARVADOS_CONTAINER_PATH/arvados-git-link-uuid
99 fi
100
101 if ! test -d $ARVADOS_CONTAINER_PATH/git/repositories/$repo_uuid.git ; then
102     git clone --bare /usr/src/arvados $ARVADOS_CONTAINER_PATH/git/repositories/$repo_uuid.git
103 else
104     git --git-dir=$ARVADOS_CONTAINER_PATH/git/repositories/$repo_uuid.git fetch -f /usr/src/arvados main:main
105 fi
106
107 cd /usr/src/arvados/services/api
108
109 if test -s $ARVADOS_CONTAINER_PATH/api_rails_env ; then
110   RAILS_ENV=$(cat $ARVADOS_CONTAINER_PATH/api_rails_env)
111 else
112   RAILS_ENV=development
113 fi
114
115 git_user_key=$(cat ~git/.ssh/id_rsa.pub)
116
117 cat > config/arvados-clients.yml <<EOF
118 $RAILS_ENV:
119   gitolite_url: $ARVADOS_CONTAINER_PATH/git/repositories/gitolite-admin.git
120   gitolite_tmp: $ARVADOS_CONTAINER_PATH/git
121   arvados_api_host: $localip:${services[controller-ssl]}
122   arvados_api_token: "$ARVADOS_API_TOKEN"
123   arvados_api_host_insecure: false
124   gitolite_arvados_git_user_key: "$git_user_key"
125 EOF
126
127 while true ; do
128     flock $GEMLOCK bundle exec script/arvados-git-sync.rb $RAILS_ENV
129     sleep 120
130 done