summaryrefslogtreecommitdiffstats
path: root/taskcluster/docker/updatebot/windows-setup.sh
blob: c04d0a6fbf7a51bc6056f62578dd306cd57d1f5e (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
130
131
132
133
134
135
#!/bin/bash
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.

set -vex

. ./taskcluster/docker/updatebot/updatebot-version.sh # Get UPDATEBOT_REVISION

HOME=$(python3 -c "import os;print(os.path.expanduser('~'))")
export HOME
GECKO_PATH="$PWD"
UPDATEBOT_PATH="$MOZ_FETCHES_DIR/updatebot"

# MOZ_FETCHES_DIR is in Z:/ format.  When we update the PATH we need to use
#   /z/ format.  Fortunately, we can translate them like so:
cd "$MOZ_FETCHES_DIR"
MOZ_FETCHES_PATH="$PWD"

#########################################################
# Install dependencies

# Move depot_tools
cd "$MOZ_FETCHES_DIR"
mv depot_tools.git depot_tools


# Generating a new version of the preloaded depot_tools download can be done by:
# 1) Running the task, uncommenting the variable assignment below, uncommenting the
#    _GENERATE_DEPOT_TOOLS_BINARIES_ section in taskcluster/ci/updatebot/kind.yml,
#    and ensuring that an angle update will actually take place (so it downloads the depot_tools)
# 2) Downloading and sanity-checking the depot_tools-preloaded-binaries-GIT_HASH-DATE.zip artifact
# 3) Adding it to tooltool
# 4) Updating the updatebot manifest
# Note that even for the same git revision the downloaded tools can change, so they are tagged
# with both the git hash and the date it was generated

# export GENERATE_DEPOT_TOOLS_BINARIES=1

if test -n "$GENERATE_DEPOT_TOOLS_BINARIES"; then
    cp -r depot_tools depot_tools-from-git
fi

# Git is at /c/Program Files/Git/cmd/git.exe
#  It's in PATH for this script (confusingly) but not in PATH so we need to add it
export PATH="/c/Program Files/Git/cmd:$PATH"

# php & arcanist
if [ -n "$TOOLTOOL_MANIFEST" ]; then
 . "$GECKO_PATH/taskcluster/scripts/misc/tooltool-download.sh"
fi

cp "$MOZ_FETCHES_DIR/vcruntime140.dll" "$MOZ_FETCHES_DIR/php-win"
cp "$GECKO_PATH/taskcluster/docker/updatebot/windows-php.ini" "$MOZ_FETCHES_DIR/php-win/php.ini"

cd "$MOZ_FETCHES_DIR/arcanist"
patch -p1 < "$GECKO_PATH/taskcluster/docker/updatebot/arcanist_windows_stream.patch"
patch -p1 < "$GECKO_PATH/taskcluster/docker/updatebot/arcanist_patch_size.patch"
cd "$MOZ_FETCHES_DIR"

export PATH="$MOZ_FETCHES_PATH/php-win:$PATH"
export PATH="$MOZ_FETCHES_PATH/arcanist/bin:$PATH"

# get Updatebot
cd "$MOZ_FETCHES_DIR"
git clone https://github.com/mozilla-services/updatebot.git
cd updatebot
git checkout "$UPDATEBOT_REVISION"

# base python needs
python3 -m pip install --no-warn-script-location --user -U pip
python3 -m pip install --no-warn-script-location --user poetry wheel requests setuptools

# updatebot dependencies
cd "$UPDATEBOT_PATH"
python3 -m poetry install

# taskcluster secrets and writing out localconfig
cd "$GECKO_PATH"
python3 ./taskcluster/docker/updatebot/run.py "$GECKO_PATH" "$UPDATEBOT_PATH" "$MOZ_FETCHES_PATH"

# mercurial configuration
cp "$GECKO_PATH/taskcluster/docker/updatebot/hgrc" "$HOME/.hgrc"
# Windows is not happy with $HOME in the hgrc so we need to do a hack to replace it
#   with the actual value
( echo "cat <<EOF" ; cat "$HOME/.hgrc" ) | sh > tmp
mv tmp "$HOME/.hgrc"

# ssh known hosts
cp "$GECKO_PATH/taskcluster/docker/push-to-try/known_hosts" "$HOME/ssh_known_hosts"

#########################################################
# Run it
export PYTHONIOENCODING=utf8
export PYTHONUNBUFFERED=1

cd "$UPDATEBOT_PATH"
python3 -m poetry run python3 ./automation.py

#########################################################
if test -n "$GENERATE_DEPOT_TOOLS_BINARIES"; then
    # Artifacts

    cd "$MOZ_FETCHES_PATH"
    mv depot_tools depot_tools-from-tc

    # Clean out unneeded files
    # Need to use cmd because for some reason rm from bash throws 'Access Denied'
    cmd '/c for /d /r %i in (*__pycache__) do rmdir /s /q %i'
    rm -rf depot_tools-from-git/.git || true

    # Delete the files that are already in git
    find depot_tools-from-git -mindepth 1 -maxdepth 1 | sed s/depot_tools-from-git/depot_tools-from-tc/ | while read -r d; do rm -rf "$d"; done

    # Make the artifact
    rm -rf depot_tools-preloaded-binaries #remove it if it existed (i.e. we probably have one from tooltool already)
    mv depot_tools-from-tc depot_tools-preloaded-binaries

    # zip can't add symbolic links, and exits with an error code. || true avoids a script crash
    zip -r depot_tools-preloaded-binaries.zip depot_tools-preloaded-binaries/ || true

    # Convoluted way to get the git hash, because we don't have a .git directory
    # Adding extra print statements just in case we need to debug it
    GIT_HASH=$(grep depot_tools -A 1 "$GECKO_PATH/taskcluster/ci/fetch/updatebot.yml" | tee /dev/tty | grep revision | tee /dev/tty | awk -F': *' '{print $2}' | tee /dev/tty)
    DATE=$(date -I)
    mv depot_tools-preloaded-binaries.zip "depot_tools-preloaded-binaries-$GIT_HASH-$DATE.zip"

    # Put the artifact into the directory we will look for it
    mkdir -p "$GECKO_PATH/obj-build/depot_tools" || true
    mv "depot_tools-preloaded-binaries-$GIT_HASH-$DATE.zip" "$GECKO_PATH/obj-build/depot_tools"
fi

#########################################################
echo "Killing SQL Proxy"
taskkill -f -im cloud_sql_proxy.exe || true