dart-sdk/tools/bots
Sigurd Meldgaard 24af087585 Bump pub to 4bd757ce1dad04035fb0dbc6156879af23d8b3b8
This includes all the changes reverted in https://dart-review.googlesource.com/c/sdk/+/289062

This also contains `https://dart.googlesource.com/pub.git/+/c939e81f Fix issue with _ in package names in dart add (3838)` fixing the reason for the revert.

Changes:
```
> git log --format="%C(auto) %h %s" 048e3ad..4bd757c
 https://dart.googlesource.com/pub.git/+/4bd757ce Handle http errors gracefully when downloading archive (3811)
 https://dart.googlesource.com/pub.git/+/c939e81f Fix issue with _ in package names in dart add (3838)
 https://dart.googlesource.com/pub.git/+/9df0fddf Lazy construction of cache path. (3837)
 https://dart.googlesource.com/pub.git/+/554b3c32 Lazy loading of pubspec.yaml from entrypoint (3835)
 https://dart.googlesource.com/pub.git/+/cfaec21f Remove support for legacy credentials file (3824)
 https://dart.googlesource.com/pub.git/+/142baa3a Remove the exported deprecatedpubCommand (3825)
 https://dart.googlesource.com/pub.git/+/719afcf4 Remove obsolete TODO. (3827)
 https://dart.googlesource.com/pub.git/+/80d3e0d6 Remove obsolete tests (for features) (3834)
 https://dart.googlesource.com/pub.git/+/09eb6125 Remove barback, build and serve commands (3833)
 https://dart.googlesource.com/pub.git/+/e2e740ca Remove command list-package-dirs (3832)
 https://dart.googlesource.com/pub.git/+/6db5faa2 Remove support for PUB_CACHE in APPDATA on windows (3831)
 https://dart.googlesource.com/pub.git/+/a7a74857 Don't ignore a folder called 'packages' when publishing (3828)
 https://dart.googlesource.com/pub.git/+/70bfc022 Remove support for .pub package-local cache (3823)
 https://dart.googlesource.com/pub.git/+/4cd7a0a5 Use local variable for buffer (3826)
 https://dart.googlesource.com/pub.git/+/397e245e Remove obsolete TODO. (3821)
 https://dart.googlesource.com/pub.git/+/17ec4652 Handle malformatted content-hashes in cache, version listing or pubspec.lock (3818)
 https://dart.googlesource.com/pub.git/+/49c682c7 Add workflow to close need-info issues with responses. (3817)
 https://dart.googlesource.com/pub.git/+/bcb5ce18 Fix wrong action when executing git command (3814)
 https://dart.googlesource.com/pub.git/+/086c2d12 Larger size limit for caching package listings (3815)
 https://dart.googlesource.com/pub.git/+/94b43d05 remove an extra period from a publish message (3812)
 https://dart.googlesource.com/pub.git/+/d69493e5 Don't allow non-null-safety constraints in the root pubspec (3800)
 https://dart.googlesource.com/pub.git/+/3514d7e7 Fail gracefully when tar file contains duplicate entries (3805)
 https://dart.googlesource.com/pub.git/+/0b3b8b44 Give full error even in summary mode (3804)
 https://dart.googlesource.com/pub.git/+/09c29722 Allow adding and removing dependency overrides (3716)
 https://dart.googlesource.com/pub.git/+/7184d1b5 accept 'topics' property in pubspec.yaml (3796)
 https://dart.googlesource.com/pub.git/+/cd106dfd Improve usage text of get (3792)
 https://dart.googlesource.com/pub.git/+/019d61cb Handle bad git revisions (3791)
 https://dart.googlesource.com/pub.git/+/e3ff7a99 Use 'pkg' and 'packages' to trigger suggestions for the pub command (3731)
 https://dart.googlesource.com/pub.git/+/ea24bf22 Better error when path dependency has no pubspec.yaml (3787)
 https://dart.googlesource.com/pub.git/+/da2a0144 Drop --use-data-isolate-strategy flag for tests (3788)
 https://dart.googlesource.com/pub.git/+/a565858e Improve documentation of `pub token` and subcommands (3778)
 https://dart.googlesource.com/pub.git/+/dd320459 Add test for publishing and consuming files with unicode characters in name (3785)
 https://dart.googlesource.com/pub.git/+/c4226d9f Fail tests on errors thrown by test PackageServer (3784)
 https://dart.googlesource.com/pub.git/+/12019939 Consider pubspec_overrides.yaml when publishing (3782)
 https://dart.googlesource.com/pub.git/+/d8a97497 Allow addition of tokens for insecure localhost repositories (3777)

```

Diff: https://dart.googlesource.com/pub.git/+/048e3ad2b5e1b4ebe6883addbc95722be6904a7b..4bd757ce1dad04035fb0dbc6156879af23d8b3b8/
Change-Id: I67babf094b7cc4152c5c4ccc4b3e536634a57fc2
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/289201
Commit-Queue: Sigurd Meldgaard <sigurdm@google.com>
Reviewed-by: William Hesse <whesse@google.com>
2023-03-16 11:17:33 +00:00
..
flutter Replace flutter/plugins analysis 2023-02-22 20:52:10 +00:00
lib/src Migrate several files in tools/. 2022-06-10 16:31:04 +00:00
__init__.py Mass format python with yapf 2019-08-05 20:34:31 +00:00
bot_utils.py Spelling tools 2022-12-21 17:26:48 +00:00
compare_results.dart [tools] migrate the rest of tools/ to null safety 2022-06-24 16:38:39 +00:00
dartdoc_footer.html add footer for dartdocs generated for the sdk for analytics and survey 2015-07-13 13:14:09 -07:00
dartdoc_footer_text.html Bump dartdoc to ab98003fc368f484fcc4c055770adea47bc83fbd 2020-09-10 02:20:30 +00:00
extend_results.dart [tools] migrate the rest of tools/ to null safety 2022-06-24 16:38:39 +00:00
find_base_commit.dart Revert "[infra] Add dart_ci scripts to Dart SDK DEPS" 2022-08-31 15:47:29 +00:00
get_builder_status.dart [infra] Remove old pub/sub processing of results 2021-12-02 13:14:27 +00:00
pub_integration_test.py Bump pub to 4bd757ce1dad04035fb0dbc6156879af23d8b3b8 2023-03-16 11:17:33 +00:00
README.md Spelling build 2023-01-23 08:56:14 +00:00
test_matrix.json Add upload tool for analysis_server benchmarks. 2023-03-15 15:59:25 +00:00
try_benchmarks.sh [ddc] Rename .dill files 2023-01-18 01:34:57 +00:00
update_blamelists.dart Spelling tools 2022-12-21 17:26:48 +00:00
update_flakiness.dart [tools] migrate the rest of tools/ to null safety 2022-06-24 16:38:39 +00:00

tools/bots

This folder contains scripts and configuration files used by Dart's continuous integration and testing infrastructure.

Test matrix

The file test_matrix.json defines the test configurations run by Dart's CI infrastructure. Changes to the test matrix affect all builds that include them.

Structure

The test matrix is a JSON document and consists of the "filesets" object, the "configurations" list, and the "builder_configurations" list as well as a "branches" list.

Filesets

The file sets define files and/or directories that need to be present for a test configuration at runtime. Any directory specified will be included along with its subdirectories recursively. Directory names must have a / at the end. All paths are relative to the SDK checkout's root directory.

"filesets": {
  "a_fileset_name": [
    "a/directory/",
    "a/file"
  ],
  "another_fileset_name": [
    "another/directory/",
    "another/file"
  ]
}

Configurations

The configurations describe all named configurations that the CI infrastructure supports. It consists of a list of configuration descriptions.

Each configuration description defines one or more configuration names using a simple template syntax, where a group (a|b|c) means taking each of the options for a different configuration name. The set of all configuration names is the result of picking each combination of group options.

The configuration name implicitly defines the options of the configuration (system, architecture, compiler, etc.), but additional options can be given in an options field.

"configurations": {
  "unittest-(linux|win|mac)": {
    "options": {
      "compiler": "dartk",
      "mode": "release",
}},

Builder Configurations

The builder configurations describes all test configurations a specific builder must execute. Each builder configuration is an object that specifies which builders it applies to, defines the build steps for the builders, and some additional metadata. Only one builder configuration can apply to a builder.

"builder_configurations": [
  {
    "builders": [
      "a-builder",
      "another-builder"
    ],
    "meta": {
      "description": "Description of this configuration."
    },
    "steps": [
    ]
  }
]

Each step is an object and must have a name. A step may also specify a script to run instead of the default script: tools/test.py. Additional arguments may be specified. These arguments will be passed to the script.

Inside arguments, the following variables will be expanded to values extracted from the builder name:

  • ${mode}: the mode in which to run the tests; e.g., release, debug
  • ${arch}: architecture to run the tests on; e.g., ia32, x64
  • $[system}: the system on which to run the tests; e.g., win, linux, mac
  • ${runtime}: the runtime to use to run the tests; e.g., vm, chrome, d8
"steps": [
  {
    "name": "build it",
    "script": "tools/build.py",
    "arguments": ["--a-flag", "target", "another_target"]
  },
  {
    "name": "test it",
    "arguments": ["-nconfiguration-${system}"]
  }
]

A step that uses the script tools/test.py either explicitly or by default is called a "test step". Test steps must include the -n command line argument to select one of the named configurations defined in the configurations section.

A step using the default script may also be sharded across many machines using the "shards" parameter. If a step is sharded, it must specify a "fileset". Only the files and directories defined by the file set will be available to the script when it's running on a shard.

{
  "name": "shard the tests",
  "shards": 10,
  "fileset": "a_fileset_name"
}

Builders

Builder name parsing

The builder names are split by '-' and each part is then examined if it is an option. Options can be runtimes (e.g. "chrome"), architectures (e.g. x64) and operating system families (e.g. win). For each valid option, additional arguments are passed to the tools/build.py script.

Adding a new builder

To add a builder:

  1. Decide on a name.
  2. Add the builder name to a new or existing configuration.
  3. File an issue labelled "area-infrastructure" to get your builder activated.

Testing a new or modified builder

Builders can be tested using a tool called led that is included in depot_tools. Replace buildername and CL number with the correct values and run:

led get-builder luci.dart.ci:<builder name> | \
led edit-cr-cl 'https://dart-review.googlesource.com/c/<cl number>' | \
led launch

Adding a builder to the commit queue

For now, file an issue labeled "area-infrastructure" to get your builder added to the commit queue.

Glossary

Builder

A builder has a name and defines the steps the need to be run when it is executed by a bot. In general, a builder defines how to build and test software.

Bot

A physical or virtual machine (or even a docker container) that executes all commands it receives. Often, these commands are the steps defined by a builder.

Sharding

Sharded steps copy all files in a file set to as many bots as specified and runs the same command on all of the shards. Each shard has a shard number. The shard number and the total number of shards are passed as arguments to the command. The command is then responsible for running a subset of its work on each shard based on these arguments.