Skip to content

Commit

Permalink
Merge branch 'main' into cmake_cruft
Browse files Browse the repository at this point in the history
  • Loading branch information
h-vetinari authored Jul 31, 2024
2 parents a475548 + 4094098 commit b786195
Show file tree
Hide file tree
Showing 1,825 changed files with 62,761 additions and 39,618 deletions.
51 changes: 51 additions & 0 deletions .github/workflows/release-asset-audit.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
import github
import sys

def main():
token = sys.argv[1]

gh = github.Github(login_or_token=token)
repo = gh.get_repo("llvm/llvm-project")

uploaders = set(
[
"DimitryAndric",
"stefanp-ibm",
"lei137",
"omjavaid",
"nicolerabjohn",
"amy-kwan",
"mandlebug",
"zmodem",
"androm3da",
"tru",
"rovka",
"rorth",
"quinnlp",
"kamaub",
"abrisco",
"jakeegan",
"maryammo",
"tstellar",
"github-actions[bot]",
]
)

for release in repo.get_releases():
print("Release:", release.title)
for asset in release.get_assets():
created_at = asset.created_at
updated_at = (
"" if asset.created_at == asset.updated_at else asset.updated_at
)
print(
f"{asset.name} : {asset.uploader.login} [{created_at} {updated_at}] ( {asset.download_count} )"
)
if asset.uploader.login not in uploaders:
with open('comment', 'w') as file:
file.write(f'@{asset.uploader.login} is not a valid uploader.')
sys.exit(1)


if __name__ == "__main__":
main()
54 changes: 54 additions & 0 deletions .github/workflows/release-asset-audit.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
name: Release Asset Audit

on:
workflow_dispatch:
release:
schedule:
# * is a special character in YAML so you have to quote this string
# Run once an hour
- cron: '5 * * * *'

pull_request:
paths:
- ".github/workflows/release-asset-audit.py"
- ".github/workflows/release-asset-audit.yml"

permissions:
contents: read # Default everything to read-only

jobs:
audit:
name: "Release Asset Audit"
runs-on: ubuntu-22.04
if: github.repository == 'llvm/llvm-project'
steps:
- uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 #v4.1.6
- name: "Run Audit Script"
env:
GITHUB_TOKEN: ${{ github.token }}
run: |
pip install --require-hashes -r ./llvm/utils/git/requirements.txt
python3 ./.github/workflows/release-asset-audit.py $GITHUB_TOKEN
- name: "File Issue"
if: >-
github.event_name != 'pull_request' &&
failure()
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea #v7.0.1
with:
github-token: ${{ secrets.ISSUE_SUBSCRIBER_TOKEN }}
script: |
var fs = require('fs');
var body = ''
if (fs.existsSync('./comment')) {
body = fs.readFileSync('./comment') + "\n\n";
}
body = body + `\n\nhttps://github.com/${context.repo.owner}/${context.repo.repo}/actions/runs/${context.runId}`
const issue = await github.rest.issues.create({
owner: context.repo.owner,
repo: context.repo.repo,
title: "Release Asset Audit Failed",
labels: ['infrastructure'],
body: body
});
console.log(issue);
94 changes: 94 additions & 0 deletions .github/workflows/release-binaries-all.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
name: Release Binaries All

permissions:
contents: read # Default everything to read-only

on:
workflow_dispatch:
inputs:
release-version:
description: 'Release Version'
required: true
type: string
upload:
description: 'Upload binaries to the release page'
required: true
default: false
type: boolean

workflow_call:
inputs:
release-version:
description: 'Release Version'
required: true
type: string
upload:
description: 'Upload binaries to the release page'
required: true
default: false
type: boolean

pull_request:
types:
- opened
- synchronize
- reopened
# When a PR is closed, we still start this workflow, but then skip
# all the jobs, which makes it effectively a no-op. The reason to
# do this is that it allows us to take advantage of concurrency groups
# to cancel in progress CI jobs whenever the PR is closed.
- closed
paths:
- '.github/workflows/release-binaries-all.yml'
- '.github/workflows/release-binaries.yml'
- '.github/workflows/release-binaries-setup-stage/*'
- '.github/workflows/release-binaries-save-stage/*'

concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || 'dispatch' }}
cancel-in-progress: True

jobs:
setup-variables:
if: >-
(github.event_name != 'pull_request' || github.event.action != 'closed')
runs-on: ubuntu-22.04
outputs:
release-version: ${{ steps.vars.outputs.release-version }}
upload: ${{ steps.vars.outputs.upload }}
steps:
- shell: bash
id: vars
run: |
upload="${{ inputs.upload }}"
release_version="${{ inputs.release-version }}"
if [ "${{ github.event_name }}" = "pull_request" ]; then
upload="false"
release_version=""
fi
echo "release-version=$release_version" >> "$GITHUB_OUTPUT"
echo "upload=$upload" >> "$GITHUB_OUTPUT"
release-binaries-all:
name: Build Release Binaries
needs:
- setup-variables
permissions:
contents: write # For release uploads
id-token: write # For artifact attestations
attestations: write # For artifact attestations
strategy:
fail-fast: false
matrix:
runs-on:
- ubuntu-22.04
- windows-2022
- macos-13
- macos-14

uses: ./.github/workflows/release-binaries.yml
with:
release-version: "${{ needs.setup-variables.outputs.release-version }}"
upload: ${{ needs.setup-variables.outputs.upload == 'true'}}
runs-on: "${{ matrix.runs-on }}"

38 changes: 38 additions & 0 deletions .github/workflows/release-binaries-save-stage/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
name: Save Stage
description: >-
Upload the source and binary directories from a build stage so that they
can be re-used in the next stage. This action is used to the release
binaries workflow into multiple stages to avoid the 6 hour timeout on
the GitHub hosted runners.
inputs:
build-prefix:
description: "Directory containing the build directory."
required: true
type: 'string'

runs:
using: "composite"
steps:
# We need to create an archive of the build directory, because it has too
# many files to upload.
- name: Package Build and Source Directories
shell: bash
run: |
# Windows does not support symlinks, so we need to dereference them.
tar --exclude build/ ${{ (runner.os == 'Windows' && '-h') || '' }} -c . | zstd -T0 -c > ../llvm-project.tar.zst
mv ../llvm-project.tar.zst .
tar -C ${{ inputs.build-prefix }} -c build/ | zstd -T0 -c > build.tar.zst
- name: Upload Stage 1 Source
uses: actions/upload-artifact@26f96dfa697d77e81fd5907df203aa23a56210a8 #v4.3.0
with:
name: ${{ runner.os }}-${{ runner.arch }}-${{ github.job }}-source
path: llvm-project.tar.zst
retention-days: 2

- name: Upload Stage 1 Build Dir
uses: actions/upload-artifact@26f96dfa697d77e81fd5907df203aa23a56210a8 #v4.3.0
with:
name: ${{ runner.os}}-${{ runner.arch }}-${{ github.job }}-build
path: build.tar.zst
retention-days: 2
59 changes: 59 additions & 0 deletions .github/workflows/release-binaries-setup-stage/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
name: Setup Stage
description: >-
Setup the next stage of the release binaries workflow. This sets up the
environment correctly for a new stage of the release binaries workflow
and also restores the source and build directory from the previous stage.
inputs:
previous-artifact:
description: >-
A unique descriptor for the artifact from the previous stage. This will
be used to construct the final artifact pattern, which is:
$RUNNER_OS-$RUNNER_ARCH-$PREVIOUS_ARTIFACT-*
required: false
type: 'string'

outputs:
build-prefix:
description: "Directory containing the build directory."
value: ${{ steps.build-prefix.outputs.build-prefix }}

runs:
using: "composite"
steps:
- name: Install Ninja
uses: llvm/actions/install-ninja@22e9f909d35b50bd1181709564bfe816eaeaae81 # main

- name: Setup Windows
if: startsWith(runner.os, 'Windows')
uses: llvm/actions/setup-windows@main
with:
arch: amd64

- name: Set Build Prefix
id: build-prefix
shell: bash
run: |
build_prefix=`pwd`
if [ "${{ runner.os }}" = "Linux" ]; then
sudo chown $USER:$USER /mnt/
build_prefix=/mnt/
fi
echo "build-prefix=$build_prefix" >> $GITHUB_OUTPUT
- name: Download Previous Stage Artifact
if: ${{ inputs.previous-artifact }}
id: download
uses: actions/download-artifact@6b208ae046db98c579e8a3aa621ab581ff575935 # v4.1.1
with:
pattern: ${{ runner.os }}-${{ runner.arch }}-${{ inputs.previous-artifact }}-*
merge-multiple: true

- name: Unpack Artifact
if: ${{ steps.download.outputs.download-path }}
shell: bash
run: |
tar --zstd -xf llvm-project.tar.zst
rm llvm-project.tar.zst
tar --zstd -C ${{ steps.build-prefix.outputs.build-prefix}} -xf build.tar.zst
rm build.tar.zst
Loading

0 comments on commit b786195

Please sign in to comment.