[libcxx-commits] [libcxx] cb9f6c4 - [libc++] Clean up unused CI files
Louis Dionne via libcxx-commits
libcxx-commits at lists.llvm.org
Fri Oct 23 12:21:15 PDT 2020
Author: Louis Dionne
Date: 2020-10-23T15:21:04-04:00
New Revision: cb9f6c4c8cbaa327b4836cf0fa61015f760f4002
URL: https://github.com/llvm/llvm-project/commit/cb9f6c4c8cbaa327b4836cf0fa61015f760f4002
DIFF: https://github.com/llvm/llvm-project/commit/cb9f6c4c8cbaa327b4836cf0fa61015f760f4002.diff
LOG: [libc++] Clean up unused CI files
Those were useful during CI experimentation, but are not used anymore.
Added:
Modified:
Removed:
libcxx/utils/ci/buildkite-pipeline-trigger.sh
libcxx/utils/ci/phabricator-report
################################################################################
diff --git a/libcxx/utils/ci/buildkite-pipeline-trigger.sh b/libcxx/utils/ci/buildkite-pipeline-trigger.sh
deleted file mode 100755
index 333cc285ab7c..000000000000
--- a/libcxx/utils/ci/buildkite-pipeline-trigger.sh
+++ /dev/null
@@ -1,37 +0,0 @@
-#===----------------------------------------------------------------------===##
-#
-# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-# See https://llvm.org/LICENSE.txt for license information.
-# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-#
-#===----------------------------------------------------------------------===##
-
-#
-# This file generates a Buildkite pipeline that triggers the libc++ CI
-# job(s) if needed. The intended usage of this script is to be piped
-# into `buildkite-agent pipeline upload`.
-#
-
-if git
diff --name-only HEAD~ | grep -q -E "libcxx/|libcxxabi/"; then
- skip="false"
-else
- skip="The commit does not touch libc++ or libc++abi"
-fi
-
-reviewID="$(git log --format=%B -n 1 | sed -nE 's/^Review-ID:[[:space:]]*(.+)$/\1/p')"
-if [[ "${reviewID}" != "" ]]; then
- buildMessage="https://llvm.org/${reviewID}"
-else
- buildMessage="Push to branch ${BUILDKITE_BRANCH}"
-fi
-
-cat <<EOF
-steps:
- - trigger: "libcxx-ci"
- async: true
- build:
- message: "${buildMessage}"
- commit: "${BUILDKITE_COMMIT}"
- branch: "${BUILDKITE_BRANCH}"
- skip: "${skip}"
-EOF
diff --git a/libcxx/utils/ci/phabricator-report b/libcxx/utils/ci/phabricator-report
deleted file mode 100755
index 71bf298e8f53..000000000000
--- a/libcxx/utils/ci/phabricator-report
+++ /dev/null
@@ -1,139 +0,0 @@
-#!/usr/bin/env python3
-#===----------------------------------------------------------------------===##
-#
-# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-# See https://llvm.org/LICENSE.txt for license information.
-# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-#
-#===----------------------------------------------------------------------===##
-
-import argparse
-import io
-import os
-import phabricator
-import re
-import socket
-import subprocess
-import sys
-import time
-
-LLVM_REVIEWS_API = "https://reviews.llvm.org/api/"
-
-def exponentialBackoffRetry(f, exception, maxAttempts=3):
- """Tries calling a function, but retry with exponential backoff if the
- function fails with the specified exception.
- """
- waitTime = 1
- attempts = 0
- while True:
- try:
- f()
- break
- except exception as e:
- attempts += 1
- if attempts == maxAttempts:
- raise e
- else:
- time.sleep(waitTime)
- waitTime *= 2
-
-def buildPassed(log):
- """
- Tries to guess whether a build has passed or not based on the logs
- produced by it.
-
- This is really hacky -- it would be better to use the status of the
- script that runs the tests, however that script is being piped into
- this script, so we can't know its exit status. What we do here is
- basically look for abnormal CMake or Lit output, but that is tightly
- coupled to the specific CI we're running.
- """
- # Lit reporting failures
- matches = re.findall(r"^\s*Failed\s*:\s*(\d+)$", log, flags=re.MULTILINE)
- if matches and any(int(match) > 0 for match in matches):
- return False
-
- # Error while running CMake
- if 'CMake Error' in log or 'Configuring incomplete, errors occurred!' in log:
- return False
-
- # Ninja failed to build some target
- if 'FAILED:' in log:
- return False
-
- return True
-
-def main(argv):
- parser = argparse.ArgumentParser(
- description="""
-This script gathers information about a Buildkite build and updates the
-Phabricator review associated to the HEAD commit with those results.
-
-The intended usage of this script is to pipe the output of a command defined
-in a Buildkite pipeline into it. The script will echo everything to stdout,
-like tee, but will also update the Phabricator review associated to HEAD
-with the results of the build.
-
-The script is assumed to be running inside a Buildkite agent, and as such,
-it assumes the existence of several environment variables that are specific
-to Buildkite.
-
-It also assumes that it is running in a context where the HEAD commit contains
-the Phabricator ID of the review to update. If the commit does not contain the
-Phabricator ID, this script is basically a no-op. This allows running the CI
-on commits that are not triggered by a Phabricator review.
-""")
- args = parser.parse_args(argv)
-
- for var in ('BUILDKITE_LABEL', 'BUILDKITE_JOB_ID', 'BUILDKITE_BUILD_URL', 'CONDUIT_TOKEN'):
- if var not in os.environ:
- raise RuntimeError(
- 'The {} environment variable must exist -- are you running '
- 'this script from a Buildkite agent?'.format(var))
-
- # First, read all the log input and write it line-by-line to stdout.
- # This is important so that we can follow progress in the Buildkite
- # console. Since we're being piped into in real time, it's also the
- # moment to time the duration of the job.
- start = time.time()
- log = io.StringIO()
- while True:
- line = sys.stdin.readline()
- if line == '':
- break
- sys.stdout.write(line)
- sys.stdout.flush() # flush every line to avoid buffering
- log.write(line)
- end = time.time()
-
- # Then, extract information from the environment and post-process the logs.
- log.seek(0)
- log = log.read()
- result = 'pass' if buildPassed(log) else 'fail'
- resultObject = {
- 'name': '{BUILDKITE_LABEL} ({BUILDKITE_BUILD_URL}#{BUILDKITE_JOB_ID})'.format(**os.environ),
- 'result': result,
- 'duration': end - start,
- 'details': log
- }
-
- commitMessage = subprocess.check_output(['git', 'log', '--format=%B' , '-n', '1']).decode()
- phabricatorID = re.search(r'^Phabricator-ID:\s+(.+)$', commitMessage, flags=re.MULTILINE)
-
- # If there's a Phabricator ID in the commit, then the build was triggered
- # by a Phabricator review -- update the results back. Otherwise, don't
- # do anything.
- if phabricatorID:
- phabricatorID = phabricatorID.group(1)
- token = os.environ['CONDUIT_TOKEN']
- phab = phabricator.Phabricator(token=token, host=LLVM_REVIEWS_API)
- exponentialBackoffRetry(
- lambda: phab.harbormaster.sendmessage(buildTargetPHID=phabricatorID, type=result, unit=[resultObject]),
- exception=socket.timeout
- )
- else:
- print('The HEAD commit does not appear to be tied to a Phabricator review -- '
- 'not uploading the results to any review.')
-
-if __name__ == '__main__':
- main(sys.argv[1:])
More information about the libcxx-commits
mailing list