PageRenderTime 2665ms CodeModel.GetById 0ms RepoModel.GetById 9ms app.codeStats 0ms

/stonecold-repo-build.sh

https://gitlab.com/forumi0721/arch_PKGBUILDs
Shell | 707 lines | 589 code | 77 blank | 41 comment | 107 complexity | a4b53844c5469ca4ba18f900fc179603 MD5 | raw file
  1. #!/usr/bin/env bash
  2. echo_white() {
  3. echo $'\e[01;0m'"${1}"$'\e[0m'"${2}"
  4. }
  5. echo_gray() {
  6. echo $'\e[01;30m'"${1}"$'\e[0m'"${2}"
  7. }
  8. echo_red() {
  9. echo $'\e[01;31m'"${1}"$'\e[0m'"${2}"
  10. }
  11. echo_green() {
  12. echo $'\e[01;32m'"${1}"$'\e[0m'"${2}"
  13. }
  14. echo_yellow() {
  15. echo $'\e[01;33m'"${1}"$'\e[0m'"${2}"
  16. }
  17. echo_blue() {
  18. echo $'\e[01;34m'"${1}"$'\e[0m'"${2}"
  19. }
  20. echo_violet() {
  21. echo $'\e[01;35m'"${1}"$'\e[0m '"${2}"
  22. }
  23. echo_cyan() {
  24. echo $'\e[01;36m'"${1}"$'\e[0m'"${2}"
  25. }
  26. #Function
  27. fn_run_docker() {
  28. local DOCKER=docker
  29. if [ -e /etc/synoinfo.conf ]; then
  30. DOCKER='sudo docker'
  31. fi
  32. local buildarch=${1}
  33. local pkgbuilddir=${2}
  34. local pkgdirname=${3}
  35. local runtype=${4}
  36. local makepkgargs=${5}
  37. local customcommand=${6}
  38. if [ -z "${customcommand}" ]; then
  39. customcommand="makepkg -cCs --noconfirm --skippgpcheck ${makepkgargs}"
  40. fi
  41. local returnvar=
  42. buildarch=${buildarch/any/x64}
  43. buildarch=${buildarch/x86_64/x64}
  44. buildarch=${buildarch/armv7h/armhf}
  45. buildarch=${buildarch/aarch64/aarch64}
  46. if [ -e /.dockerenv ]; then
  47. if [ ! -e /var/lib/pacman/sync/StoneCold.db ]; then
  48. pacman -Suy --noconfirm
  49. fi
  50. ${customcommand}
  51. else
  52. local repository="forumi0721arch${buildarch}/arch-${buildarch}-dev"
  53. local dockername="arch-${buildarch}-${runtype}-${pkgdirname}"
  54. if [ -z "$(${DOCKER} images -a -q ${repository}:latest)" ]; then
  55. ${DOCKER} pull ${repository}
  56. fi
  57. if [ ! -z "$(${DOCKER} ps -a -f "name=${dockername}" -q)" ]; then
  58. ${DOCKER} rm -f ${dockername}
  59. fi
  60. local docker_run_alt="${TEMP_DIR}/${pkgdirname}-docker-run-alt"
  61. cat << EOF > "${docker_run_alt}"
  62. #!/bin/sh
  63. #if [ -z "\$(grep $(id -n -u) /etc/sudoers)" ]; then
  64. # echo "$(id -n -u) ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
  65. #fi
  66. if [ -z "\$(grep StoneCold /etc/pacman.conf)" ]; then
  67. cat << EOF2 >> /etc/pacman.conf
  68. [StoneCold]
  69. SigLevel = Optional TrustAll
  70. Server = file:///stonecold-repo/\\\$arch
  71. EOF2
  72. fi
  73. cd /build
  74. pacman -Suy --noconfirm
  75. su-exec $(id -n -u) ${customcommand}
  76. exit \$?
  77. EOF
  78. chmod 755 "${docker_run_alt}"
  79. if [ "${buildarch}" = "armhf" ]; then
  80. set -x
  81. ${DOCKER} run $([ "${VERBOSE}" = "Y" ] && echo "-i") -t -m 2048M --rm --name ${dockername} -h arch-${buildarch}-dev-${runtype} -e RUN_USER_NAME=$(id -n -u) -e RUN_USER_UID=$(id -u) -e RUN_USER_GID=$(id -g) -e LANG=C -e LC_ALL=C -v ${BASE_DIR}/stonecold-repo:/stonecold-repo -v "${pkgbuilddir}":/build -v ${docker_run_alt}:/usr/local/bin/docker-run-alt --entrypoint=/usr/bin/qemu-arm-static ${repository} /bin/sh -c "/usr/local/bin/docker-run"
  82. set +x
  83. returnvar=$?
  84. elif [ "${buildarch}" = "aarch64" ]; then
  85. ${DOCKER} run $([ "${VERBOSE}" = "Y" ] && echo "-i") -t -m 2048M --rm --name ${dockername} -h arch-${buildarch}-dev-${runtype} -e RUN_USER_NAME=$(id -n -u) -e RUN_USER_UID=$(id -u) -e RUN_USER_GID=$(id -g) -e LANG=C -e LC_ALL=C -v ${BASE_DIR}/stonecold-repo:/stonecold-repo -v "${pkgbuilddir}":/build -v ${docker_run_alt}:/usr/local/bin/docker-run-alt --entrypoint=/usr/bin/qemu-aarch64-static ${repository} /bin/sh -c "/usr/local/bin/docker-run"
  86. returnvar=$?
  87. else
  88. ${DOCKER} run $([ "${VERBOSE}" = "Y" ] && echo "-i") -t -m 2048M --rm --name ${dockername} -h arch-${buildarch}-dev-${runtype} -e RUN_USER_NAME=$(id -n -u) -e RUN_USER_UID=$(id -u) -e RUN_USER_GID=$(id -g) -e LANG=C -e LC_ALL=C -v ${BASE_DIR}/stonecold-repo:/stonecold-repo -v "${pkgbuilddir}":/build -v ${docker_run_alt}:/usr/local/bin/docker-run-alt ${repository}
  89. returnvar=$?
  90. fi
  91. rm -rf "${docker_run_alt}"
  92. fi
  93. return ${returnvar}
  94. }
  95. fn_check_version() {
  96. local retvalue=0
  97. pushd "${1}" &>/dev/null
  98. local pkgfile="$(pwd)/PKGBUILD"
  99. local pkgdir="$(pwd)"
  100. local pkgdirname="$(basename "${pkgdir}")"
  101. popd &> /dev/null
  102. #Validation
  103. if [ -e "${pkgdir}/SOURCE" ]; then
  104. if [ ! -z "$(grep '^HOLDPKGVER="Y"$' ${pkgdir}/SOURCE)" ]; then
  105. echo_yellow " -> " "Skip (HOLDPKGVER=Y)"
  106. return 1
  107. fi
  108. if [ ! -z "$(grep '^HOLDPKGVER=Y$' ${pkgdir}/SOURCE)" ]; then
  109. echo_yellow " -> " "Skip (HOLDPKGVER=Y)"
  110. return 1
  111. fi
  112. fi
  113. #Get current pkgver
  114. local pkgver1=$(bash -c "source \"${pkgfile}\" ; echo \$([ ! -z "\${epoch}" ] && echo "\${epoch}:")\${pkgver}-\${pkgrel}")
  115. if [ -z "${pkgver1}" ]; then
  116. echo_red "Cannot get pkgver in PKGBUILD"
  117. return 1
  118. fi
  119. #Current pkgver
  120. echo_blue " -> " "Current version : ${pkgver1}"
  121. #Import setting
  122. echo_blue " -> " "Import setting..."
  123. local sourcetype=
  124. local sourcepath=
  125. local pkgveropt=
  126. local buildopt=
  127. unset SOURCETYPE
  128. unset SOURCEPATH
  129. unset PKGVEROPT
  130. unset BUILDOPT
  131. unset -f GetSourcePatch
  132. unset -f CheckUpdate
  133. if [ -e "${pkgdir}/SOURCE" ]; then
  134. L_ENV_DISABLE_PROMPT=1 source "${pkgdir}/SOURCE"
  135. if [ "${HOLDPKGVER}" = "Y" ]; then
  136. echo_yellow " -> " "Skip (HOLDPKGVER=Y)"
  137. return 1
  138. fi
  139. sourcetype=${SOURCETYPE}
  140. if [ "${sourcetype}" = "local" ]; then
  141. sourcepath="${pkgdir}"
  142. else
  143. sourcepath="${SOURCEPATH}"
  144. fi
  145. fi
  146. if [ -z "${sourcetype}" ]; then
  147. sourcetype="local"
  148. fi
  149. if [ -z "${sourcepath}" ]; then
  150. sourcepath="${pkgdir}"
  151. fi
  152. if [ ! -z "${PKGVEROPT}" ]; then
  153. pkgveropt=${PKGVEROPT}
  154. fi
  155. if [ ! -z "${BUILDOPT}" ]; then
  156. buildopt=${BUILDOPT}
  157. fi
  158. #GetSource
  159. echo_blue " -> " "Get source (${sourcetype})..."
  160. local tempdir="${TEMP_DIR}/${pkgdirname}-temp"
  161. rm -rf ${tempdir}
  162. mkdir -p ${tempdir}
  163. local downloadpath="$(fn_download "${pkgdir}" "${tempdir}" "${sourcetype}" "${sourcepath}" | tail -1)"
  164. if [ "$?" = "1" ]; then
  165. echo_red "Cannot find source"
  166. rm -rf "${tempdir}" "${downloadpath}"
  167. return 1
  168. elif [ "$?" = "2" ]; then
  169. echo_red "Cannot get source"
  170. rm -rf "${tempdir}" "${downloadpath}"
  171. return 1
  172. elif [ "$?" = "3" ]; then
  173. echo_red "Unknown source type"
  174. rm -rf "${tempdir}" "${downloadpath}"
  175. return 1
  176. fi
  177. if [ ! -e "${downloadpath}" ]; then
  178. echo_red "Cannot found download path : ${downloadpath}"
  179. rm -rf "${tempdir}" "${downloadpath}"
  180. return 1
  181. fi
  182. if [ ! -e "${downloadpath}/PKGBUILD" ]; then
  183. echo_red "Cannot found download path : ${downloadpath}"
  184. rm -rf "${tempdir}" "${downloadpath}"
  185. return 1
  186. fi
  187. #GetNewPkgversion
  188. echo_blue " -> " "Get new version..."
  189. pushd "${downloadpath}" &> /dev/null
  190. if [ ! -z "$(declare -f CheckUpdate)" ]; then
  191. echo_yellow " -> " "Check Update..."
  192. CheckUpdate
  193. fi
  194. if [ ! -z "$(declare -f GetSourcePatch)" ]; then
  195. echo_yellow " -> " "Apply patch..."
  196. GetSourcePatch
  197. fi
  198. #unset pkgver
  199. #unset -f pkgver
  200. #alias eval="echo"
  201. #L_ENV_DISABLE_PROMPT=1 source ./PKGBUILD &> /dev/null
  202. #unalias eval
  203. #if [ ! -z "$(declare -f pkgver)" ]; then
  204. local use_pkgver="$(bash -c "source ./PKGBUILD ; declare -f pkgver &> /dev/null && echo \"Y\"")"
  205. if [ "${use_pkgver}" = "Y" ]; then
  206. echo_yellow " -> " "Execute makepkg..."
  207. local pkgbuilddir="${TEMP_DIR}/${pkgdirname}-build"
  208. rm -rf "${pkgbuilddir}"
  209. cp -ar "${downloadpath}" "${pkgbuilddir}"
  210. local buildarch=
  211. if [ ! -z "$(grep "^arch=.*any.*$" PKGBUILD)" ]; then
  212. buildarch=x64
  213. elif [ ! -z "$(grep "^arch=.*x86_64.*$" PKGBUILD)" ]; then
  214. buildarch=x64
  215. elif [ ! -z "$(grep "^arch=.*armv7h.*$" PKGBUILD)" ]; then
  216. buildarch=armhf
  217. elif [ ! -z "$(grep "^arch=.*aarch64.*$" PKGBUILD)" ]; then
  218. buildarch=aarch64
  219. fi
  220. if [ -z "${buildarch}" ]; then
  221. echo_red "cannot found build arch"
  222. popd &> /dev/null
  223. rm -rf "${tempdir}" "${downloadpath}" "${pkgbuilddir}"
  224. return 1
  225. fi
  226. fn_run_docker "${buildarch}" "${pkgbuilddir}" "${pkgdirname}" "pkgver" "--nobuild $([ -z ${pkgveropt} ] && echo "--nodeps --nocheck" || echo "${pkgveropt}")"
  227. if [ "$?" != "0" ]; then
  228. echo_red "makepkg failed"
  229. popd &> /dev/null
  230. rm -rf "${tempdir}" "${downloadpath}" "${pkgbuilddir}"
  231. return 1
  232. else
  233. if [ -e "${pkgbuilddir}/PKGBUILD" ]; then
  234. cp -f "${pkgbuilddir}/PKGBUILD" "${downloadpath}/PKGBUILD"
  235. rm -rf "${pkgbuilddir}"
  236. fi
  237. fi
  238. fi
  239. #unset pkgver
  240. #unset -f pkgver
  241. popd &> /dev/null
  242. #Get new pkgver
  243. local pkgver2=$(bash -c "source \"${downloadpath}/PKGBUILD\" ; echo \$([ ! -z "\${epoch}" ] && echo "\${epoch}:")\${pkgver}-\${pkgrel}")
  244. if [ -z "${pkgver2}" ]; then
  245. echo_red "Cannot get pkgver in PKGBUILD"
  246. rm -rf "${tempdir}" "${TEMP_DIR}/makepkg-repo-${USER}"
  247. return 1
  248. fi
  249. #Current pkgver
  250. echo_blue " -> " "New version : ${pkgver2}"
  251. #Check
  252. echo_blue " -> " "Compare version..."
  253. if [ "$(cat "${downloadpath}/PKGBUILD" | wc -l)" = "0" ]; then
  254. retvalue=1
  255. echo_red " -> " "Empty PKGBUILD file"
  256. exit
  257. else
  258. diff "${pkgfile}" "${downloadpath}/PKGBUILD" &> /dev/null
  259. if [ "${?}" = "0" ]; then
  260. echo_blue " -> " "Already up-to-date."
  261. retvalue=0
  262. pushd "${pkgdir}" &> /dev/null
  263. for buildarch in any x86_64 armv7h aarch64
  264. do
  265. if [ ! -z "$(grep "^arch=.*${buildarch}.*$" PKGBUILD)" ]; then
  266. if [ -z "$(ls *-${pkgver2}-${buildarch}.pkg.tar.xz 2>/dev/null)" ]; then
  267. echo_red " -> " "But cannot found pkg"
  268. retvalue=2
  269. break
  270. fi
  271. fi
  272. done
  273. popd &> /dev/null
  274. else
  275. retvalue=2
  276. fi
  277. fi
  278. if [ "${retvalue}" = "2" ]; then
  279. echo_cyan " -> " "Current version : ${pkgver1}"
  280. echo_cyan " -> " "New version : ${pkgver2}"
  281. echo_yellow " -> " "Update..."
  282. pushd "${pkgdir}" &> /dev/null
  283. local f=
  284. for f in $(ls -a --ignore=. --ignore=.. --ignore=*.pkg.tar.* --ignore=*.src.tar.* --ignore=*.bin.tar.* --ignore=SOURCE --ignore=.git)
  285. do
  286. rm -rf ${f}
  287. done
  288. popd &> /dev/null
  289. pushd "${pkgdir}" &> /dev/null
  290. local f=
  291. for f in $(ls -a --ignore=. --ignore=.. --ignore=*.pkg.tar.* --ignore=*.src.tar.* --ignore=*.bin.tar.* --ignore=SOURCE --ignore=.svn --ignore=.git "${downloadpath}")
  292. do
  293. cp -ar "${downloadpath}/${f}" ./
  294. done
  295. popd &> /dev/null
  296. fi
  297. #Cleanup
  298. echo_blue " -> " "Cleanup..."
  299. rm -rf "${tempdir}" "${downloadpath}" "${pkgbuilddir}"
  300. unset SOURCETYPE
  301. unset SOURCEPATH
  302. unset -f GetSourcePatch
  303. if [ "${SKIP_BUILD}" = "Y" ]; then
  304. return ${retvalue}
  305. fi
  306. #Build
  307. if [ "${retvalue}" = "2" -o "${FORCE_BUILD}" = "Y" ]; then
  308. echo_blue " -> " "Build..."
  309. local realpath="$(realpath "${1}")"
  310. local temppath="${TEMP_DIR}/${pkgdirname}-makepkg"
  311. local success=Y
  312. rm -rf "${temppath}"
  313. cp -r "${realpath}" "${temppath}"
  314. rm -rf "${temppath}"/*.pkg.tar.xz
  315. pushd "${temppath}" &>/dev/null
  316. for buildarch in any x86_64 armv7h aarch64
  317. do
  318. if [ ! -z "$(grep "^arch=.*${buildarch}.*$" PKGBUILD)" ]; then
  319. fn_run_docker "${buildarch}" "${temppath}" "${pkgdirname}" "makepkg" "${buildopt}"
  320. if ls "${temppath}"/*-${buildarch}.pkg.tar.xz &> /dev/null ; then
  321. rm -rf "${realpath}"/*-${buildarch}.pkg.tar.xz
  322. cp -r "${temppath}"/*-${buildarch}.pkg.tar.xz ${realpath}/
  323. cp -f "${temppath}"/PKGBUILD ${realpath}/
  324. else
  325. success=N
  326. fi
  327. fi
  328. done
  329. popd &>/dev/null
  330. if [ "${success}" = "Y" ]; then
  331. pushd "${realpath}" &>/dev/null
  332. if [ "${realpath/arch_aur_PKGBUILDs/}" != "${realpath}" -o "${realpath/arch_stonecold_PKGBUILDs/}" != "${realpath}" -o "${realpath/arch_pi_PKGBUILDs/}" != "${realpath}" -o "${realpath/arch_meta_PKGBUILDs/}" != "${realpath}" ]; then
  333. for buildarch in any x86_64 armv7h aarch64
  334. do
  335. if [ ! -z "$(grep "^arch=.*${buildarch}.*$" PKGBUILD)" ]; then
  336. fn_run_docker "${buildarch}" "${realpath}" "$(basename "${realpath}")" "srcinfo" "" "makepkg --printsrcinfo > .SRCINFO"
  337. break
  338. fi
  339. done
  340. fi
  341. git add .
  342. git commit -m "$(basename "${realpath}"): Update (Auto)"
  343. #git push
  344. popd &>/dev/null
  345. else
  346. echo_red " -> " "Build Failed"
  347. fi
  348. fi
  349. return ${retvalue}
  350. }
  351. #Function
  352. fn_download() {
  353. local retvalue=
  354. local pkgdir="${1}"
  355. local tempdir="${2}"
  356. local sourcetype="${3}"
  357. local sourcepath="${4}"
  358. local sourcebase=
  359. if [ "${sourcetype}" = "AUR4" ]; then
  360. sourcebase="$(basename "${pkgdir}")"
  361. elif [ "${sourcetype}" = "ASP" ]; then
  362. sourcebase="${sourcepath}"
  363. else
  364. sourcebase="$(basename "${sourcepath}")"
  365. fi
  366. if [ "${sourcetype}" = "ABS" ]; then
  367. if [ ! -e "${sourcepath}" ]; then
  368. #echo "Cannot find source"
  369. return 1
  370. fi
  371. cp -r "${sourcepath}" "${tempdir}/"
  372. pushd "${tempdir}" &> /dev/null
  373. retvalue=$(ls -d */ | cut -d '/' -f 1)
  374. popd &> /dev/null
  375. elif [ "${sourcetype}" = "RSYNC" ]; then
  376. pushd "${tempdir}" &> /dev/null
  377. local cnt=
  378. for cnt in {1..10}
  379. do
  380. rsync -mrt "${sourcepath}"/* "${sourcebase}" &> /dev/null
  381. if [ "$?" = "0" ]; then
  382. break;
  383. fi
  384. rm -rf "${tempdir}/${sourcebase}"
  385. done
  386. if [ ! -e "${tempdir}/${sourcebase}" ]; then
  387. #echo "Cannot get source"
  388. popd &> /dev/null
  389. return 2
  390. fi
  391. retvalue="${sourcebase}"
  392. popd &> /dev/null
  393. elif [ "${sourcetype}" = "ASP" ]; then
  394. pushd "${tempdir}" &> /dev/null
  395. local cnt=
  396. for cnt in {1..10}
  397. do
  398. #asp export "${sourcepath}" &> /dev/null
  399. echo fn_run_docker "x64" "${tempdir}" "$(basename "${tempdir}")" "asp" "" "asp export ${sourcepath}"
  400. fn_run_docker "x64" "${tempdir}" "$(basename "${tempdir}")" "asp" "" "asp export ${sourcepath}"
  401. if [ -e "${tempdir}/${sourcebase}" ]; then
  402. break;
  403. fi
  404. done
  405. if [ ! -e "${tempdir}/${sourcebase}" ]; then
  406. #echo "Cannot get source"
  407. popd &> /dev/null
  408. return 2
  409. fi
  410. retvalue="${sourcebase}"
  411. popd &> /dev/null
  412. elif [ "${sourcetype}" = "AUR" ]; then
  413. local cnt=
  414. for cnt in {1..10}
  415. do
  416. wget "${sourcepath}" -O "${tempdir}/${sourcebase}" &>/dev/null
  417. if [ "$?" = "0" ]; then
  418. break;
  419. fi
  420. rm -rf "${tempdir}/${sourcebase}"
  421. done
  422. if [ ! -e "${tempdir}/${sourcebase}" ]; then
  423. #echo "Cannot get source"
  424. return 2
  425. fi
  426. pushd "${tempdir}" &> /dev/null
  427. bsdtar -xf "${tempdir}/${sourcebase}"
  428. rm -rf "${tempdir}/${sourcebase}"
  429. retvalue=$(ls -d */ | cut -d '/' -f 1)
  430. popd &> /dev/null
  431. elif [ "${sourcetype}" = "AUR4" ]; then
  432. pushd "${tempdir}" &> /dev/null
  433. local src_name="$(echo "${sourcepath}" | sed -e "s@^https://aur.archlinux.org/\(.*\).git\$@\1@g")"
  434. local cnt=
  435. for cnt in {1..10}
  436. do
  437. #git clone --depth=1 "${sourcepath}" "${tempdir}/${sourcebase}" &> /dev/null
  438. wget --no-check-certificate -q "https://aur.archlinux.org/cgit/aur.git/snapshot/${src_name}.tar.gz"
  439. if [ "$?" = "0" ]; then
  440. tar zxf "${src_name}.tar.gz"
  441. rm -rf "${src_name}.tar.gz"
  442. if [ "${src_name}" != "${sourcebase}" ]; then
  443. mv "${src_name}" "${sourcebase}"
  444. fi
  445. break;
  446. fi
  447. rm -rf "${tempdir}/${sourcebase}"
  448. done
  449. if [ ! -e "${tempdir}/${sourcebase}" ]; then
  450. #echo "Cannot get source"
  451. return 2
  452. fi
  453. retvalue=$(ls -d */ | cut -d '/' -f 1)
  454. popd &> /dev/null
  455. elif [ "${sourcetype}" = "SVN" ]; then
  456. pushd "${tempdir}" &> /dev/null
  457. local cnt=
  458. for cnt in {1..10}
  459. do
  460. svn co "${sourcepath}" "${sourcebase}" &> /dev/null
  461. if [ "$?" = "0" ]; then
  462. break;
  463. fi
  464. rm -rf "${tempdir}/${sourcebase}"
  465. done
  466. if [ ! -e "${tempdir}/${sourcebase}" ]; then
  467. #echo "Cannot get source"
  468. popd &> /dev/null
  469. return 2
  470. fi
  471. retvalue="${sourcebase}"
  472. popd &> /dev/null
  473. elif [ "${sourcetype}" = "GIT" ]; then
  474. pushd "${tempdir}" &> /dev/null
  475. local cnt=
  476. for cnt in {1..10}
  477. do
  478. git clone --depth=1 "${sourcepath}" "${sourcebase}"
  479. if [ "$?" = "0" ]; then
  480. break;
  481. fi
  482. done
  483. if [ ! -e "${sourcebase}" ]; then
  484. #echo "Cannot get source"
  485. popd &> /dev/null
  486. return 2
  487. fi
  488. retvalue="${sourcebase}"
  489. popd &> /dev/null
  490. elif [ "${sourcetype}" = "GITHUB_RAW" ]; then
  491. pushd "${tempdir}" &> /dev/null
  492. local url_h=$(echo ${sourcepath} | sed -e 's@https://github.com@@g' -e 's@/tree/master@/blob/master@g')
  493. local url_d=$(echo ${sourcepath} | sed -e 's@/tree/master@/raw/master@g')
  494. local cnt=
  495. for cnt in {1..10}
  496. do
  497. mkdir -p "${tempdir}/${sourcebase}"
  498. for f in $(wget ${sourcepath} -q -O - | grep "<a href=\"${url_h}/" | sed -e "s@^.*<a href=\"${url_h}/\([^\"]*\)\".*@\1@g")
  499. do
  500. wget ${url_d}/${f} -q -O ${sourcebase}/${f} &>/dev/null
  501. done
  502. if [ "$?" = "0" ]; then
  503. break;
  504. fi
  505. rm -rf "${tempdir}/${sourcebase}"
  506. done
  507. if [ ! -e "${sourcebase}" ]; then
  508. #echo "Cannot get source"
  509. popd &> /dev/null
  510. return 2
  511. fi
  512. retvalue="${sourcebase}"
  513. popd &> /dev/null
  514. elif [ "${sourcetype}" = "GIT_SUBDIR" ]; then
  515. pushd "${tempdir}" &> /dev/null
  516. local url=$(echo ${sourcepath} | cut -d '|' -f 1)
  517. local subdir=$(echo ${sourcepath} | cut -d '|' -f 2)
  518. if [ ! -z "${subdir}" ]; then
  519. sourcebase="${subdir}"
  520. fi
  521. sourcepath="${url}"
  522. local cnt=
  523. for cnt in {1..10}
  524. do
  525. wget ${sourcepath} -O - | tar zxvf - ${subdir}/ -C ./ &>/dev/null
  526. if [ "$?" = "0" ]; then
  527. break;
  528. fi
  529. done
  530. if [ ! -e "${sourcebase}" ]; then
  531. #echo "Cannot get source"
  532. popd &> /dev/null
  533. return 2
  534. fi
  535. retvalue="${sourcebase}"
  536. popd &> /dev/null
  537. elif [ "${sourcetype}" = "local" ]; then
  538. if [ ! -e "${sourcepath}" ]; then
  539. #echo "Cannot find source"
  540. return 1
  541. fi
  542. mkdir -p "${tempdir}/${sourcebase}"
  543. pushd "${sourcepath}" &> /dev/null
  544. local f=
  545. for f in $(ls -a --ignore=. --ignore=.. --ignore=*.pkg.tar.* --ignore=SOURCE)
  546. do
  547. cp -ar "${f}" "${tempdir}/${sourcebase}/"
  548. done
  549. popd &> /dev/null
  550. retvalue="${sourcebase}"
  551. else
  552. #echo "Unknown source type"
  553. return 3
  554. fi
  555. echo
  556. echo "${tempdir}/${retvalue}"
  557. return 0
  558. }
  559. #Main
  560. if [ -e /.dockerenv -a ! -e /etc/arch-release ]; then
  561. echo_red "Cannot run in dockerenv"
  562. exit 1
  563. fi
  564. VERBOSE=N
  565. SKIP_BUILD=N
  566. FORCE_BUILD=N
  567. BASE_DIR="$(dirname "$(realpath "${0}")")"
  568. TEMP_DIR=${BASE_DIR}/tmp/makepkg-$(id -n -u)
  569. rm -rf ${TEMP_DIR}
  570. mkdir -p "${TEMP_DIR}"
  571. while [ "${#}" -ne 0 ]
  572. do
  573. case "${1}" in
  574. -v) VERBOSE="Y" ;;
  575. -s) SKIP_BUILD="Y" ;;
  576. -f) FORCE_BUILD="Y" ;;
  577. esac
  578. shift 1
  579. done
  580. for cmd in git svn
  581. do
  582. if ! which ${cmd} &> /dev/null ; then
  583. for p in /bin /sbin /usr/bin /usr/sbin /usr/local/bin /usr/local/sbin /opt/bin /opt/sbin
  584. do
  585. if [ -e ${p}/${cmd} ]; then
  586. alias ${cmd}=${p}/${cmd}
  587. break
  588. fi
  589. done
  590. fi
  591. done
  592. UPDATE_LIST=
  593. for src in $(find . -name PKGBUILD -not \( -path "./arch_meta_PKGBUILDs/*" -o -path "./arch_deprecated_PKGBUILDs/*" -o -path "./tmp/*" \) | sort)
  594. do
  595. srcdir="$(dirname "${src}")"
  596. echo_green "==> " "Start - ${srcdir}"
  597. fn_check_version "${srcdir}"
  598. if [ "$?" = "2" ]; then
  599. UPDATE_LIST+=("${srcdir}")
  600. fi
  601. echo_green "==> " "Done."
  602. echo
  603. done
  604. if [ ${#UPDATE_LIST[@]} -gt 1 ]; then
  605. echo
  606. echo
  607. echo_green "==> " "Update List"
  608. for update in ${UPDATE_LIST[@]}
  609. do
  610. if [ ! -z "${update}" ]; then
  611. echo_cyan " -> " "${update}"
  612. fi
  613. done
  614. echo_green "==> " "Done."
  615. echo
  616. fi
  617. if [ "${SKIP_BUILD}" = "N" ]; then
  618. if [ -e "$(basename "${0}")" -a -e stonecold-repo ]; then
  619. git submodule foreach git push
  620. git add .
  621. git commit -m 'Update (Auto)'
  622. git push
  623. if [ -x ./stonecold-repo-gen.sh ]; then
  624. ./stonecold-repo-gen.sh
  625. fi
  626. fi
  627. fi
  628. chmod -R +rw "${TEMP_DIR}"
  629. rm -rf "${TEMP_DIR}"
  630. exit 0