43f36b5b24
build: (wip) initial dynamic config research * build: (wip) test path filtering option * build: (wip) remove doc-only script, use path filtering to check changes * build: (wip) add docker image with Electron dependencies * build: (wip) clean up config * build (wip): readd parameters, executors and env*s * build: re-add steps and commands * build: change doc-only to ts-compile-doc-only * build: re-add workflows and jobs * build: split configs to setup & build * build: move lint to "always run" config * build: clean up, remove old reference config * build: bump to path-filtering 0.1.0 * build: remove ts-compile step from build-linux * build: remove nightly-linux-release-test, linux-checks-nightly * build: don't run build on publish * build: set base-revision to main (runs branch vs commit) * build: update config from chromium roll
145 lines
4.3 KiB
YAML
145 lines
4.3 KiB
YAML
version: 2.1
|
|
|
|
# Required for dynamic configuration
|
|
setup: true
|
|
|
|
# Orbs
|
|
orbs:
|
|
path-filtering: circleci/path-filtering@0.1.0
|
|
|
|
# All input parameters to pass to build config
|
|
parameters:
|
|
run-docs-only:
|
|
type: boolean
|
|
default: false
|
|
|
|
upload-to-s3:
|
|
type: string
|
|
default: '1'
|
|
|
|
run-build-linux:
|
|
type: boolean
|
|
default: false
|
|
|
|
run-build-mac:
|
|
type: boolean
|
|
default: false
|
|
|
|
run-linux-publish:
|
|
type: boolean
|
|
default: false
|
|
|
|
linux-publish-arch-limit:
|
|
type: enum
|
|
default: all
|
|
enum: ["all", "arm", "arm64", "x64", "ia32"]
|
|
|
|
run-macos-publish:
|
|
type: boolean
|
|
default: false
|
|
|
|
macos-publish-arch-limit:
|
|
type: enum
|
|
default: all
|
|
enum: ["all", "osx-x64", "osx-arm64", "mas-x64", "mas-arm64"]
|
|
|
|
# Envs
|
|
env-global: &env-global
|
|
ELECTRON_OUT_DIR: Default
|
|
|
|
env-linux-medium: &env-linux-medium
|
|
<<: *env-global
|
|
NUMBER_OF_NINJA_PROCESSES: 3
|
|
|
|
# Executors
|
|
executors:
|
|
linux-docker:
|
|
parameters:
|
|
size:
|
|
description: "Docker executor size"
|
|
default: 2xlarge+
|
|
type: enum
|
|
enum: ["medium", "xlarge", "2xlarge+"]
|
|
docker:
|
|
- image: ghcr.io/electron/build:27db4a3e3512bfd2e47f58cea69922da0835f1d9
|
|
resource_class: << parameters.size >>
|
|
|
|
# List of always run steps
|
|
step-checkout-electron: &step-checkout-electron
|
|
checkout:
|
|
path: src/electron
|
|
|
|
steps-lint: &steps-lint
|
|
steps:
|
|
- *step-checkout-electron
|
|
- run:
|
|
name: Setup third_party Depot Tools
|
|
command: |
|
|
# "depot_tools" has to be checkout into "//third_party/depot_tools" so pylint.py can a "pylintrc" file.
|
|
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git src/third_party/depot_tools
|
|
echo 'export PATH="$PATH:'"$PWD"'/src/third_party/depot_tools"' >> $BASH_ENV
|
|
- run:
|
|
name: Download GN Binary
|
|
command: |
|
|
chromium_revision="$(grep -A1 chromium_version src/electron/DEPS | tr -d '\n' | cut -d\' -f4)"
|
|
gn_version="$(curl -sL "https://chromium.googlesource.com/chromium/src/+/${chromium_revision}/DEPS?format=TEXT" | base64 -d | grep gn_version | head -n1 | cut -d\' -f4)"
|
|
|
|
cipd ensure -ensure-file - -root . \<<-CIPD
|
|
\$ServiceURL https://chrome-infra-packages.appspot.com/
|
|
@Subdir src/buildtools/linux64
|
|
gn/gn/linux-amd64 $gn_version
|
|
CIPD
|
|
|
|
echo 'export CHROMIUM_BUILDTOOLS_PATH="'"$PWD"'/src/buildtools"' >> $BASH_ENV
|
|
- run:
|
|
name: Download clang-format Binary
|
|
command: |
|
|
chromium_revision="$(grep -A1 chromium_version src/electron/DEPS | tr -d '\n' | cut -d\' -f4)"
|
|
|
|
sha1_path='buildtools/linux64/clang-format.sha1'
|
|
curl -sL "https://chromium.googlesource.com/chromium/src/+/${chromium_revision}/${sha1_path}?format=TEXT" | base64 -d > "src/${sha1_path}"
|
|
|
|
download_from_google_storage.py --no_resume --no_auth --bucket chromium-clang-format -s "src/${sha1_path}"
|
|
- run:
|
|
name: Run Lint
|
|
command: |
|
|
# gn.py tries to find a gclient root folder starting from the current dir.
|
|
# When it fails and returns "None" path, the whole script fails. Let's "fix" it.
|
|
touch .gclient
|
|
# Another option would be to checkout "buildtools" inside the Electron checkout,
|
|
# but then we would lint its contents (at least gn format), and it doesn't pass it.
|
|
|
|
cd src/electron
|
|
node script/yarn install --frozen-lockfile
|
|
node script/yarn lint
|
|
- run:
|
|
name: Run Script Typechecker
|
|
command: |
|
|
cd src/electron
|
|
node script/yarn tsc -p tsconfig.script.json
|
|
|
|
# List of always run jobs.
|
|
jobs:
|
|
lint:
|
|
executor:
|
|
name: linux-docker
|
|
size: medium
|
|
environment:
|
|
<<: *env-linux-medium
|
|
<<: *steps-lint
|
|
|
|
# Initial setup workflow
|
|
workflows:
|
|
lint:
|
|
jobs:
|
|
# Job inherited from path-filtering orb
|
|
- path-filtering/filter:
|
|
base-revision: main
|
|
# Params for mapping; `path-to-test parameter-to-set value-for-parameter` for each row
|
|
mapping: |
|
|
^((?!docs/).)*$ run-build-mac true
|
|
^((?!docs/).)*$ run-build-linux true
|
|
docs/.* run-docs-only true
|
|
^((?!docs/).)*$ run-docs-only false
|
|
config-path: .circleci/build_config.yml
|
|
- lint
|