-
Notifications
You must be signed in to change notification settings - Fork 13
135 lines (117 loc) · 5.58 KB
/
release-swift-toolchain-binary-sizes.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
# Uploads a toolchain release's binary size metrics to DataDog.
#
# To target a specific Swift Toolchain Release, run:
#
# $TOOLCHAIN_VERSION="..."
# gh workflow run "Release - Swift Toolchain Binary Sizes" `
# -f toolchain_version=${TOOLCHAIN_VERSION} `
# -f environment_label=${USER} `
# -R github.com/thebrowsercompany/swift-build `
#
name: Release - Swift Toolchain Binary Sizes
# TODO(thebrowsercompany/swift-build/issues/129): Support arm64 releases.
# TODO(kendal): Use on.releases.[created, edited] when the table schema is stable.
on:
workflow_dispatch:
inputs:
toolchain_version:
description: 'Use this swift toolchain release version'
required: false
type: string
default: '' # See env.SWIFT_TOOLCHAIN_VERSION
environment_label:
description: 'Tag the uploaded data with this value. This helps with filtering'
required: false
type: string
default: ''
env:
SOURCE_ROOT: ${{ github.workspace }}/source
BUILD_ROOT: ${{ github.workspace }}/build
jobs:
binary_size_data:
name: Generate Swift toolchain binary size data
runs-on: cirun-win11-23h2-pro-arm64-16-2024-04-22
permissions:
contents: read
# required to make OIDC work
id-token: write
env:
BLOATY_OPTIONS_FILE: ${{ github.workspace }}/bloaty.textproto
SWIFT_TOOLCHAIN_VERSION: ${{ github.event.inputs.toolchain_version || github.ref_name }}
ENVIRONMENT_LABEL: ${{ github.event.inputs.environment_label || 'ci' }}
strategy:
matrix:
toolchain_arch: [arm64]
steps:
- name: Checkout swift-build
uses: actions/checkout@v4
with:
show-progress: false
- name: Get service account credentials
# configure-aws-credentials v4.0.1 release
uses: thebrowsercompany/gha-aws-ssm-get-parameter@v1
with:
aws-role-to-assume: ${{ secrets.SWIFT_TOOLCHAIN_UPLOADER_ROLE_ARN }}
aws-role-session-name: SwiftToolchainMetricsUploader
aws-ssm-parameter: "/shared/secrets/GITHUB_ACTIONS_BQ_DATA_UPLOAD"
save-to-filepath: ${{ github.workspace }}/.google_application_credentials
- name: Setup Google application default credentials
run: echo "GOOGLE_APPLICATION_CREDENTIALS=${{ github.workspace }}/.google_application_credentials" | Out-File -FilePath $env:GITHUB_ENV -Append
- name: Install Swift toolchain
uses: kendalharland/gha-setup-swift@334a2ff86ccce8d5982fe7e6d850c1bfd0d0c78c
with:
github-repo: thebrowsercompany/swift-build
github-token: ${{ secrets.GITHUB_TOKEN }}
release-asset-name: installer-${{ matrix.toolchain_arch }}.exe
release-tag-name: ${{ env.SWIFT_TOOLCHAIN_VERSION }}
- name: Store Swift Toolchain root in environment variable
run: |
# Locate the toolchain installation <root> by walking up from
# '<root>/Toolchains/<toolchain-version>/usr/bin/swift.exe'.
$SwiftPath=$(Get-Command swift).Source
$SwiftInstallRoot=$(Resolve-Path -LiteralPath $SwiftPath\..\..\..\..\..)
echo "SWIFT_INSTALL_ROOT=${SwiftInstallRoot}" | Out-File -FilePath $env:GITHUB_ENV -Append
# For scripts/python/binary_sizes
- name: Install Python dependencies
run: |
pip install google-cloud-bigquery
pip install google-auth-oathlib
pip install pandas
- name: Setup VS Dev Env
uses: compnerd/gha-setup-vsdevenv@main
with:
host_arch: ${{ matrix.toolchain_arch }}
components: 'Microsoft.VisualStudio.Component.VC.Tools.x86.x64;Microsoft.VisualStudio.Component.VC.Tools.ARM64'
arch: ${{ matrix.toolchain_arch }}
- name: Run google/bloaty
uses: thebrowsercompany/gha-google-bloaty@6fff8bfd94cb9aaa7a641c2aec7850975665ed6d
with:
bloaty-version: 34f4a66559ad4938c1e629e9b5f54630b2b4d7b0
bloaty-args: -w -n 0 -d inputfiles,segments -s file --csv
bloaty-input-files: |
${{ env.SWIFT_INSTALL_ROOT }}/**/*.dll
${{ env.SWIFT_INSTALL_ROOT }}/**/*.exe
bloaty-output-file: ${{ github.workspace }}/binary_sizes.csv
cache-bloaty: 'true'
# Normally the cache key includes `bloaty-version`. This ensures that all workflow runs
# use a single cache even if bloaty is updated, consuming minimal space.
cache-bloaty-key: google-bloaty-${{ matrix.toolchain_arch }}
- name: Generate BigQuery table data
run: |
$CreationTime=$(gh release view ${{ env.SWIFT_TOOLCHAIN_VERSION }} --json createdAt --jq '.[]')
$Script="./scripts/python/binary_sizes/bigquery_generate_table_data.py"
python ${Script} ${{ github.workspace }}/binary_sizes.csv ${{ github.workspace }}/table_data.csv `
--toolchain-version=${{ env.SWIFT_TOOLCHAIN_VERSION }} `
--strip-inputfiles-prefix=${{ env.SWIFT_INSTALL_ROOT }} `
--environment="${{ env.ENVIRONMENT_LABEL }}" `
--creation-time="$CreationTime"
- name: Show BigQuery table data to upload
run: Get-Content -Path ${{ github.workspace }}/table_data.csv
- name: Upload to BigQuery
continue-on-error: true
run: |
$Script="./scripts/python/binary_sizes/bigquery_load_csv.py"
python ${Script} ${{ github.workspace }}/table_data.csv
# TODO(thebrowsercompany/gha-aws-ssm-get-parameter/issues/1): Do this as a post-step in gha-aws-ssm-get-parameter.
- name: Cleanup credentials
run: Remove-Item ${{ github.workspace }}/.google_application_credentials