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