1#!/bin/sh -eux 2 3# Copyright (c) 2022 Yubico AB. All rights reserved. 4# Use of this source code is governed by a BSD-style 5# license that can be found in the LICENSE file. 6# SPDX-License-Identifier: BSD-2-Clause 7 8BASE_URL="https://builds.sr.ht" 9MANIFEST="$(mktemp)" 10LOGFILE="$(mktemp)" 11trap '[ -f "${LOGFILE}" ] && cat -- "${LOGFILE}"' EXIT 12 13# construct the sourcehut build manifest 14cat > "${MANIFEST}" <<- EOF 15image: ${IMAGE} 16packages: 17 - cmake 18 - llvm 19 - pcsc-lite 20EOF 21 22case "${IMAGE}" in 23 freebsd*) 24cat >> "${MANIFEST}" <<- EOF 25 - libcbor 26 - pkgconf 27EOF 28 ;; 29esac 30 31cat >> "${MANIFEST}" <<- EOF 32sources: 33 - ${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}#$(git rev-parse HEAD) 34tasks: 35 - build: | 36 if [ "\$(uname)" = "OpenBSD" ]; then 37 SUDO="doas -u root" 38 else 39 SUDO=sudo 40 fi 41 SCAN="/usr/local/bin/scan-build --use-cc=/usr/bin/cc --status-bugs" 42 cd libfido2 43 for T in Debug Release; do 44 mkdir build-\$T 45 (cd build-\$T && \${SCAN} cmake -DCMAKE_BUILD_TYPE=\$T ..) 46 \${SCAN} make -j"\$(sysctl -n hw.ncpu)" -C build-\$T 47 make -C build-\$T regress 48 \${SUDO} make -C build-\$T install 49 done 50EOF 51 52q() { 53 curl \ 54 --silent \ 55 --oauth2-bearer "${SOURCEHUT_TOKEN}" \ 56 --header "Content-Type: application/json" \ 57 --data @- -- \ 58 "${BASE_URL}/query" \ 59 | tee -a -- "${LOGFILE}" 60} 61 62submit_job() { 63 local manifest="$1" 64 jq \ 65 --compact-output --null-input \ 66 '{ query: $body, variables: { var: $var } }' \ 67 --arg body 'mutation($var: String!) { submit(manifest: $var) { id } }' \ 68 --rawfile var "${manifest}" \ 69 | q \ 70 | jq --exit-status --raw-output '.data.submit.id' 71} 72 73job_status() { 74 local id="$1" 75 jq \ 76 --compact-output --null-input \ 77 '{ query: $body, variables: { var: $var } }' \ 78 --arg body 'query($var: Int!) { job(id: $var) { status } }' \ 79 --argjson var "${id}" \ 80 | q \ 81 | jq --exit-status --raw-output '.data.job.status' 82} 83 84JOB_ID="$(submit_job "${MANIFEST}")" || exit 1 85[ -z "${JOB_ID}" ] && exit 1 86echo "Job '${JOB_ID}' running at ${BASE_URL}/~yubico-libfido2/job/${JOB_ID}" 87 88while true; do 89 JOB_STATUS="$(job_status "${JOB_ID}")" || exit 1 90 case "${JOB_STATUS}" in 91 SUCCESS) exit 0;; 92 FAILED) exit 1;; 93 PENDING|QUEUED|RUNNING) ;; 94 *) exit 1;; 95 esac 96 sleep 60 97done 98