-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path.gitlab-ci.yml
146 lines (139 loc) · 4.9 KB
/
.gitlab-ci.yml
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
variables:
PACKAGES: "slocum_glider_msgs slocum_glider_extctl_serial slocum_glider_extctl slocum_glider_mission_controller slocum_glider_pwrctl slocum_glider_extctl_logger"
THIRD_PARTY_DEBS: "https://gitlab.com/sentinel-aug/ds_msgs/-/jobs/artifacts/master/raw/ros-ROSDIST-ds-core-msgs_ARCH.deb?job=collect-artifacts https://gitlab.com/sentinel-aug/ds_msgs/-/jobs/artifacts/master/raw/ros-ROSDIST-ds-nmea-msgs_ARCH.deb?job=collect-artifacts https://gitlab.com/sentinel-aug/ds_msgs/-/jobs/artifacts/master/raw/ros-ROSDIST-ds-sensor-msgs_ARCH.deb?job=collect-artifacts"
# This section is not strictly required, but prevents Gitlab CI from launching
# multiple redundent pipelines when a Merge Request is opened.
workflow:
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
- if: '$CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS'
when: never
- if: '$CI_COMMIT_BRANCH'
- if: '$CI_COMMIT_TAG'
build debs:
image: ros:$ROS_VERSION-ros-base
script:
- arch="$(dpkg --print-architecture)"
- apt-get update
- apt-get install -y fakeroot debhelper
- '[ "$ROS_VERSION" = "melodic" ] || apt-get install -y python3-bloom python3-pip'
- '[ "$ROS_VERSION" != "melodic" ] || apt-get install -y python-bloom python-pip'
- |
for deb in $THIRD_PARTY_DEBS; do
url="$(echo "$deb" | sed s/ROSDIST/$ROS_VERSION/ | sed s/ARCH/$arch/)"
file="$(mktemp)"
echo "Downloading $url to $file"
curl -fsSL "$url" > "$file"
dpkg -i "$file"
done
- echo "yaml https://gitlab.com/sentinel-aug/ros/rosdep/-/raw/main/$ROS_VERSION.yaml" > /etc/ros/rosdep/sources.list.d/30-user.list
- rosdep update
- source /opt/ros/$ROS_VERSION/setup.bash
- mkdir -p /catkin_ws/src
- ln -s $(pwd) /catkin_ws/src/${CI_PROJECT_NAME}
- pushd /catkin_ws/src
- catkin_init_workspace
- pushd $CI_PROJECT_NAME
- rosdep install -y -r -i --from-paths $PACKAGES
- popd
- popd
- |
for package in $PACKAGES; do
echo "working on $package"
kebab_package="$(echo "$package" | tr _ -)"
pushd "$package"
bloom-generate rosdebian --native
fakeroot debian/rules binary
popd
mv "ros-$ROS_DISTRO-${kebab_package}_"*.deb "ros-$ROS_DISTRO-${kebab_package}_$arch.deb"
dpkg -i "ros-$ROS_DISTRO-${kebab_package}_$arch.deb"
rosversion "$package" > "$kebab_package-version.txt"
done
artifacts:
paths:
- "*.deb"
- "*-version.txt"
parallel:
matrix:
- ROS_VERSION: [melodic, noetic]
RUNNER: [docker, arm64]
tags:
- "$RUNNER"
collect-artifacts:
script:
- echo "collecting artifacts"
artifacts:
paths:
- "*.deb"
- version.txt
needs:
- build debs
check versions:
image: alpine:latest
script:
- |
for package in $PACKAGES; do
kebab_package="$(echo "$package" | tr _ -)"
if [ "$(cat "$kebab_package-version.txt")" != "${CI_COMMIT_TAG#v}" ]; then
echo "Unexpected version for $kebab_package"
exit 1
fi
done
rules:
- if: '$CI_COMMIT_TAG =~ /^v[0-9]+(\.[0-9]+)*(-.*)?$/'
needs:
- collect-artifacts
upload debs:
image: curlimages/curl:latest
script:
- |
for package in $PACKAGES; do
echo "working on $package"
kebab_package="$(echo "$package" | tr _ -)"
for dist in melodic noetic; do
for arch in amd64 arm64; do
file_name="ros-$dist-${kebab_package}_$arch.deb"
curl --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload "$file_name" "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/ros-$dist-$kebab_package/$CI_COMMIT_TAG/$file_name"
done
done
done
rules:
- if: '$CI_COMMIT_TAG =~ /^v[0-9]+(\.[0-9]+)*(-.*)?$/'
needs:
- collect-artifacts
- check versions
release:
image: registry.gitlab.com/gitlab-org/release-cli:latest
script:
- assets=""
- |
for package in $PACKAGES; do
kebab_package="$(echo "$package" | tr _ -)"
for dist in melodic noetic; do
for arch in amd64 arm64; do
file_name="ros-$dist-${kebab_package}_$arch.deb"
assets="$assets --assets-link {\"name\":\"$file_name\",\"url\":\"${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/ros-$dist-$kebab_package/$CI_COMMIT_TAG/$file_name\"}"
done
done
done
- |
release-cli create --name "$CI_PROJECT_NAME $CI_COMMIT_TAG" --tag-name "$CI_COMMIT_TAG" $assets
rules:
- if: '$CI_COMMIT_TAG =~ /^v[0-9]+(\.[0-9]+)*(-.*)?$/'
needs:
- collect-artifacts
- check versions
roslint:
image: ros:noetic-ros-base
script:
- apt-get update
- apt-get install -y ros-noetic-roslint
- source /opt/ros/noetic/setup.bash
- mkdir -p /catkin_ws/src
- ln -s $(pwd) /catkin_ws/src/${CI_PROJECT_NAME}
- cd /catkin_ws/src
- catkin_init_workspace
- cd ..
- catkin_make
- catkin_make roslint
needs: []