Skip to content

Commit 38679f0

Browse files
committed
ci: add .gitlab-ci.yml to support CI/CD
1 parent 7507e37 commit 38679f0

File tree

1 file changed

+195
-0
lines changed

1 file changed

+195
-0
lines changed

.gitlab-ci.yml

Lines changed: 195 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,195 @@
1+
stages:
2+
- build
3+
- private_deploy
4+
- test
5+
- public_deploy
6+
7+
image: ${CI_DOCKER_REGISTRY}/llvm-build:3
8+
9+
variables:
10+
11+
CONF_TARGET: "xtensa-esp32-elf"
12+
XTENSA_CLANG_TOOLCHAIN: "${CONF_TARGET}-clang"
13+
PLATFORM_NAME_LINUX: "linux-amd64"
14+
PLATFORM_NAME_WIN: "win64"
15+
PLATFORM_NAME_MACOS: "macos"
16+
17+
XTENSA_CLANG_TOOLCHAIN_BRANCH: "esp-20220415-r14.0.0"
18+
GCC_REL_NAME: "gcc8_4_0-esp-2021r2-patch3"
19+
20+
ARCHIVE_TOOL_LINUX: "tar -cJf"
21+
UNARCHIVE_TOOL_LINUX: "tar -xf"
22+
ARCHIVE_EXT_LINUX: "tar.xz"
23+
24+
ARCHIVE_TOOL_WIN: "zip -9 -r"
25+
UNARCHIVE_TOOL_WIN: "unzip"
26+
ARCHIVE_EXT_WIN: "zip"
27+
28+
ARCHIVE_TOOL_MACOS: "tar -cJf"
29+
UNARCHIVE_TOOL_MACOS: "tar -xf"
30+
ARCHIVE_EXT_MACOS: "tar.xz"
31+
32+
DIST_DIR: "dist"
33+
34+
.use_ci_tools: &use_ci_tools |
35+
curl -sSL ${CIT_LOADER_URL} -o cit_loader.sh && sh cit_loader.sh
36+
source citools/import_functions
37+
38+
.add_gitlab_key: &add_gitlab_key |
39+
cit_add_ssh_key "${GITLAB_KEY}"
40+
41+
before_script:
42+
- *use_ci_tools
43+
- *add_gitlab_key
44+
45+
# Prepare release name/number
46+
.get_release_name: &get_release_name |
47+
# using annotated tags
48+
REL_NUM=$(git describe --abbrev=7)
49+
REL_SFX="llvm14_0_0"
50+
REL_NAME=${CONF_TARGET}-${REL_SFX}-${REL_NUM}-${PLATFORM_NAME}
51+
ARCHIVE_NAME=${REL_NAME}.${ARCHIVE_EXT}
52+
echo "CONF_TARGET: $CONF_TARGET"
53+
echo "PLATFORM_NAME: $PLATFORM_NAME"
54+
echo "REL_NUM: $REL_NUM"
55+
echo "REL_NAME: $REL_NAME"
56+
echo "ARCHIVE_NAME: $ARCHIVE_NAME"
57+
58+
# Get an existing crosstool-ng build for esp32
59+
.get_gcc_toolchain: &get_gcc_toolchain |
60+
wget --no-verbose https://dl.espressif.com/github_assets/espressif/crosstool-NG/releases/download/esp-2021r2-patch3/${XTENSA_GCC_TOOLCHAIN}
61+
${UNARCHIVE_TOOL} ${XTENSA_GCC_TOOLCHAIN}
62+
mv xtensa-esp32-elf ${XTENSA_CLANG_TOOLCHAIN}
63+
64+
.get_clang_toolchain_build_scripts: &get_clang_toolchain_build_scripts |
65+
git clone -b ${XTENSA_CLANG_TOOLCHAIN_BRANCH} ${GITLAB_SSH_SERVER}/${XTENSA_CLANG_TOOLCHAIN_REPO}
66+
cp -r xtensa-clang-toolchain/* .
67+
68+
# LLVM Build System used the remote address to show detailed version info, we'll change it to the public repository
69+
.fix_origin_remote_for_public: &fix_origin_remote_for_public |
70+
git remote set-url origin "${GH_REPO_HTTPS}"
71+
72+
# Pack the toolchain
73+
.package_toolchain: &package_toolchain |
74+
${ARCHIVE_TOOL} ${ARCHIVE_NAME} ${XTENSA_CLANG_TOOLCHAIN}/
75+
mkdir -p ${DIST_DIR}
76+
mv ${ARCHIVE_NAME} ${DIST_DIR}/
77+
echo "${ARCHIVE_NAME}" > ${DIST_DIR}/file_${PLATFORM_NAME}_${CONF_TARGET}
78+
79+
.build_template:
80+
stage: build
81+
tags: [ "amd64", "build" ]
82+
artifacts:
83+
paths:
84+
- ${DIST_DIR}/
85+
when: always
86+
expire_in: 10 day
87+
script:
88+
- *get_release_name
89+
- *get_gcc_toolchain
90+
- *fix_origin_remote_for_public
91+
- *get_clang_toolchain_build_scripts
92+
- ${BUILD_TOOLCHAIN_CMD} "${XTENSA_CLANG_TOOLCHAIN}"
93+
- *package_toolchain
94+
95+
linux_amd64_build:
96+
extends: .build_template
97+
variables:
98+
PLATFORM_NAME: "${PLATFORM_NAME_LINUX}"
99+
ARCHIVE_TOOL: "${ARCHIVE_TOOL_LINUX}"
100+
UNARCHIVE_TOOL: "${UNARCHIVE_TOOL_LINUX}"
101+
ARCHIVE_EXT: "${ARCHIVE_EXT_LINUX}"
102+
# a filename was moved here from the global 'variables:' because of GCC_REL_NAME value couldn't be expanded and substituted there
103+
XTENSA_GCC_TOOLCHAIN: "xtensa-esp32-elf-${GCC_REL_NAME}-linux-amd64.tar.gz"
104+
BUILD_TOOLCHAIN_CMD: "./build-toolchain-linux.sh"
105+
106+
win64_build:
107+
extends: .build_template
108+
variables:
109+
PLATFORM_NAME: "${PLATFORM_NAME_WIN}"
110+
ARCHIVE_TOOL: "${ARCHIVE_TOOL_WIN}"
111+
UNARCHIVE_TOOL: "${UNARCHIVE_TOOL_WIN}"
112+
ARCHIVE_EXT: "${ARCHIVE_EXT_WIN}"
113+
XTENSA_GCC_TOOLCHAIN: "xtensa-esp32-elf-${GCC_REL_NAME}-win64.zip"
114+
BUILD_TOOLCHAIN_CMD: "./build-toolchain-win.sh"
115+
116+
macos_amd64_build:
117+
extends: .build_template
118+
variables:
119+
PLATFORM_NAME: "${PLATFORM_NAME_MACOS}"
120+
ARCHIVE_TOOL: "${ARCHIVE_TOOL_MACOS}"
121+
UNARCHIVE_TOOL: "${UNARCHIVE_TOOL_MACOS}"
122+
ARCHIVE_EXT: "${ARCHIVE_EXT_MACOS}"
123+
XTENSA_GCC_TOOLCHAIN: "xtensa-esp32-elf-${GCC_REL_NAME}-macos.tar.gz"
124+
BUILD_TOOLCHAIN_CMD: "./build-toolchain-macos.sh"
125+
126+
linux_amd64_testsuite:
127+
stage: test
128+
tags: [ "amd64", "build" ]
129+
dependencies:
130+
- linux_amd64_build
131+
variables:
132+
PLATFORM_NAME: "${PLATFORM_NAME_LINUX}"
133+
ARCHIVE_TOOL: "${ARCHIVE_TOOL_LINUX}"
134+
UNARCHIVE_TOOL: "${UNARCHIVE_TOOL_LINUX}"
135+
ARCHIVE_EXT: "${ARCHIVE_EXT_LINUX}"
136+
script:
137+
- *get_release_name
138+
- ${UNARCHIVE_TOOL} ${DIST_DIR}/${ARCHIVE_NAME}
139+
140+
# getting testsuit
141+
- git clone -b feature/ci_llvm_multitarget --depth 1 $GITLAB_SSH_SERVER/idf/llvm-xtensa-testsuite.git
142+
143+
# preparing testsuit
144+
- export PATH=$PATH:${PWD}/${XTENSA_CLANG_TOOLCHAIN}/bin/
145+
- cd llvm-xtensa-testsuite
146+
147+
# qemu
148+
- ./qemu_esp32_install.sh
149+
150+
# run testsuite for esp32
151+
- ./run_esp32_tests.sh
152+
153+
upload_to_http:
154+
stage: private_deploy
155+
when: manual
156+
allow_failure: true
157+
tags: [ "deploy", "shiny" ]
158+
variables:
159+
# force the fetch strategy to clean old archives up in dist/ dir
160+
GIT_STRATEGY: fetch
161+
before_script:
162+
- *use_ci_tools
163+
script:
164+
- cit_add_ssh_key "${HTTP_UPLOAD_KEY}"
165+
# List of archives
166+
- FILES=$(find ${DIST_DIR} -name file_\* -exec cat {} \+)
167+
- cd ${DIST_DIR}
168+
- scp ${FILES} ${HTTP_UPLOAD_DIR}/ct-ng/llvm-builds
169+
# Show info
170+
- echo -e "\nArchives were published there:\n\n$(for n in ${FILES}; do echo "${HTTP_PUBLIC_DIR}/ct-ng/llvm-builds/${n}"; done)\n"
171+
172+
upload_to_github:
173+
stage: public_deploy
174+
when: manual
175+
allow_failure: true
176+
only:
177+
- tags
178+
tags: [ "amd64", "internet" ]
179+
image: espressif/github-hub:2
180+
variables:
181+
GIT_STRATEGY: fetch
182+
GITHUB_TOKEN: "${GH_TOKEN}"
183+
GITHUB_REPO: "${GH_REPO_HTTPS}"
184+
TAG: "${CI_COMMIT_TAG}"
185+
before_script: []
186+
script:
187+
- ls -l dist*/
188+
- git remote add github ${GH_REPO_HTTPS}
189+
- hub release show ${TAG} || { echo "Please create a release on GitHub with ${TAG} tag at first"; exit 1; }
190+
# List of archives
191+
- FILES=$(find ${DIST_DIR} -name file_\* -exec cat {} \+)
192+
- cd ${DIST_DIR}
193+
- ls -l $FILES
194+
# Upload archives
195+
- for n in ${FILES}; do hub release edit -m "" -a "${n}" "${TAG}"; done

0 commit comments

Comments
 (0)