/
publish-nightly-jiro.sh
executable file
·157 lines (134 loc) · 7.41 KB
/
publish-nightly-jiro.sh
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
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
#!/bin/sh
# ====================================================================
# Copyright (c) 2013, 2015, 2019 Obeo
# This program and the accompanying materials
# are made available under the terms of the Eclipse Public License 2.0
# which accompanies this distribution, and is available at
# https://www.eclipse.org/legal/epl-2.0
#
# Contributors:
# Obeo - initial API and implementation
# ====================================================================
[ -z "$WORKSPACE" -o -z "$PLATFORM" -o -z "$GIT_BRANCH" -o -z "$BUILD_TIMESTAMP" ] && {
echo "Execution aborted.
One or more of the required variables is not set. They are normally
provided by the Jenkins build.
- WORKSPACE : the build workspace root.
- PLATFORM : the name of the target Eclipse release (e.g. photon, 2019-03...).
- GIT_BRANCH : the name fo the Git branch being build/published.
- BUILD_TIMESTAMP : timestamp to use to identify this particular build (e.g. 20180201-113000)
"
echo "****** CURRENT ENVIRONMENT ******"
env | sort
exit 1
}
######################################################################
# Setup
######################################################################
# Exit on error
set -e
# The full version (should be taken as an argument)
export VERSION="6.4.0"
# The type of build being published
export BUILD_TYPE="nightly"
export BUILD_TYPE_PREFIX="N"
# The SSH account to use
export SSH_ACCOUNT="genie.sirius@projects-storage.eclipse.org"
# The root folder for all Sirius udpate sites
export SIRIUS_UPDATES_ROOT="/home/data/httpd/download.eclipse.org/sirius/updates"
# Streams are of the form 1.0.x: only keep major and minor version number parts
export STREAM=$(echo "$VERSION" | sed -r -e 's/^([0-9]+\.[0-9]+\.).*$/\1x/')
# The short version, common to all versions in that stream
export SHORT_VERSION=$(echo "$VERSION" | sed -r -e 's/^([0-9]+\.[0-9]+)\..*$/\1/')
# The timestamp in the p2 composite repos used to implement redirects
export P2_TIMESTAMP=$(date +"%s000")
# The full version for this build, e.g. 0.9.0-N20131015-070707
export FULL_VERSION="${VERSION}-${BUILD_TYPE_PREFIX}${BUILD_TIMESTAMP}"
# The root folder where all the builds of the same type as this one
# are published
export TARGET_ROOT="$SIRIUS_UPDATES_ROOT/$BUILD_TYPE"
# The folder for this particular build
export TARGET_DIR="$TARGET_ROOT/$FULL_VERSION/$PLATFORM"
######################################################################
# Publish the build
######################################################################
export WKS="."
# Ensure the target folder exists
ssh "$SSH_ACCOUNT" mkdir -p "$TARGET_DIR"
# The actual publication of the p2 repo produced by the build
scp -rp "$WKS"/packaging/org.eclipse.sirius.update/target/repository/* "$SSH_ACCOUNT:$TARGET_DIR"
# Also publish the tests repo right under the main one
ssh "$SSH_ACCOUNT" mkdir -p "$TARGET_DIR/tests"
scp -rp "$WKS"/packaging/org.eclipse.sirius.tests.update/target/repository/* "$SSH_ACCOUNT:$TARGET_DIR/tests"
# Publish the target platform definitions used, so that dowstream projects can reference them
ssh "$SSH_ACCOUNT" mkdir -p "$TARGET_DIR/targets"
scp -rp "$WKS"/releng/org.eclipse.sirius.targets/* "$SSH_ACCOUNT:$TARGET_DIR/targets"
ssh "$SSH_ACCOUNT" mkdir -p "$TARGET_ROOT/$VERSION/$PLATFORM/targets"
scp -rp "$WKS"/releng/org.eclipse.sirius.targets/* "$SSH_ACCOUNT:$TARGET_ROOT/$VERSION/$PLATFORM/targets"
ssh "$SSH_ACCOUNT" mkdir -p "$TARGET_ROOT/$STREAM/$PLATFORM/targets"
scp -rp "$WKS"/releng/org.eclipse.sirius.targets/* "$SSH_ACCOUNT:$TARGET_ROOT/$STREAM/$PLATFORM/targets"
# Also update publish targets "$BUILD_TYPE/targets and "$BUILD_TYPE/latest/targets" links if we are building master
ssh "$SSH_ACCOUNT" mkdir -p "$TARGET_ROOT/targets"
if [ "origin/master" = "$GIT_BRANCH" ]; then
ssh "$SSH_ACCOUNT" mkdir -p "$TARGET_ROOT/targets"
scp -rp "$WKS"/releng/org.eclipse.sirius.targets/* "$SSH_ACCOUNT:$TARGET_ROOT/targets"
ssh "$SSH_ACCOUNT" mkdir -p "$TARGET_ROOT/latest/targets"
scp -rp "$WKS"/releng/org.eclipse.sirius.targets/* "$SSH_ACCOUNT:$TARGET_ROOT/latest/targets"
fi
# Publish a dump of the build environment, may be useful to debug
env | sort > build_env.txt
scp build_env.txt "$SSH_ACCOUNT:$TARGET_DIR/build_env.txt"
rm build_env.txt
######################################################################
# Setup or update the redirects (implemented as composite repos)
######################################################################
# Create a p2 composite repo to setup a redirect
create_redirect() {
FROM="$1"
TO="$2"
ssh "$SSH_ACCOUNT" mkdir -p "$FROM"
cat > compositeArtifacts.xml <<EOF
<?xml version='1.0' encoding='UTF-8'?>
<?compositeArtifactRepository version='1.0.0'?>
<repository name='Eclipse Sirius' type='org.eclipse.equinox.internal.p2.artifact.repository.CompositeArtifactRepository' version='1.0.0'>
<properties size='1'>
<property name='p2.timestamp' value='$P2_TIMESTAMP'/>
</properties>
<children size='1'>
<child location='http://download.eclipse.org/sirius/updates/$TO'/>
</children>
</repository>
EOF
scp compositeArtifacts.xml "$SSH_ACCOUNT:$FROM/compositeArtifacts.xml"
cat > compositeContent.xml <<EOF
<?xml version='1.0' encoding='UTF-8'?>
<?compositeMetadataRepository version='1.0.0'?>
<repository name='Eclipse Sirius' type='org.eclipse.equinox.internal.p2.metadata.repository.CompositeMetadataRepository' version='1.0.0'>
<properties size='1'>
<property name='p2.timestamp' value='$P2_TIMESTAMP'/>
</properties>
<children size='1'>
<child location='http://download.eclipse.org/sirius/updates/$TO'/>
</children>
</repository>
EOF
scp compositeContent.xml "$SSH_ACCOUNT:$FROM/compositeContent.xml"
}
# First, a link for the $VERSION (e.g. "1.2.0/luna" => "1.2.0-NYYYYMMDD-HHMM/luna")
create_redirect "$TARGET_ROOT/$VERSION/$PLATFORM" "$BUILD_TYPE/$FULL_VERSION/$PLATFORM"
create_redirect "$TARGET_ROOT/$VERSION/$PLATFORM/tests" "$BUILD_TYPE/$FULL_VERSION/$PLATFORM/tests"
ssh "$SSH_ACCOUNT" mkdir -p "$TARGET_ROOT/$VERSION/$PLATFORM/targets"
scp -rp "$WKS"/releng/org.eclipse.sirius.targets/* "$SSH_ACCOUNT:$TARGET_ROOT/$VERSION/$PLATFORM/targets"
# Also create a link for the $STREAM (e.g. "1.2.x/luna" => "1.2.0-NYYYYMMDD-HHMM/luna")
# and publish the zipped versions there, at stable URLs
create_redirect "$TARGET_ROOT/$STREAM/$PLATFORM" "$BUILD_TYPE/$FULL_VERSION/$PLATFORM"
scp -rp "$WKS"/packaging/org.eclipse.sirius.update/target/org.eclipse.sirius.update-*.zip "$SSH_ACCOUNT:$TARGET_ROOT/$STREAM/org.eclipse.sirius-$VERSION-$PLATFORM.zip"
create_redirect "$TARGET_ROOT/$STREAM/$PLATFORM/tests" "$BUILD_TYPE/$FULL_VERSION/$PLATFORM/tests"
scp -rp "$WKS"/packaging/org.eclipse.sirius.tests.update/target/org.eclipse.sirius.tests.update-*.zip "$SSH_ACCOUNT:$TARGET_ROOT/$STREAM/org.eclipse.sirius.tests-$VERSION-$PLATFORM.zip"
# Also update the global "latest" links if we are building master
if [ "origin/master" = "$GIT_BRANCH" ]; then
create_redirect "$TARGET_ROOT/latest/$PLATFORM" "$BUILD_TYPE/$FULL_VERSION/$PLATFORM"
scp -rp "$WKS"/packaging/org.eclipse.sirius.update/target/org.eclipse.sirius.update-*.zip "$SSH_ACCOUNT:$TARGET_ROOT/$STREAM/org.eclipse.sirius-$VERSION-$PLATFORM.zip"
create_redirect "$TARGET_ROOT/latest/$PLATFORM/tests" "$BUILD_TYPE/$FULL_VERSION/$PLATFORM/tests"
scp -rp "$WKS"/packaging/org.eclipse.sirius.tests.update/target/org.eclipse.sirius.tests.update-*.zip "$SSH_ACCOUNT:$TARGET_ROOT/$STREAM/org.eclipse.sirius.tests-$VERSION-$PLATFORM.zip"
fi