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