Commit Graph

116 Commits

Author SHA1 Message Date
Robin Krom
6a328212f2
language: automatic ts codegen for daml start (#7516)
This executes the code generations specified in the daml.yaml
configuration file on every invocation of `daml start`
and hence frees the user of doing it manually.

CHANGELOG_BEGIN
- [DAML Assistant] The `daml start` now runs all the code generators
specified in the `daml.yaml` project configuration file under the
`codegen` stanza. This frees the user of doing so manually on every
change to the DAML model.
CHANGELOG_END
2020-10-02 15:43:06 +02:00
Richard Kapolnai
3badccfb1f
Rename more contract instance (#7557)
* Replace "contract instance" with "contract" in docs folder
CHANGELOG_BEGIN
CHANGELOG_END

* remove contract instance in docs/source/concepts/glossary.rst

* Remove contract instance explanation docs/source/concepts/glossary.rst

* Update docs/source/concepts/glossary.rst

* Replace contract-contract-instance label ref with contract

* Remove redundant naming

* remove more "contract instance"
CHANGELOG_BEGIN
CHANGELOG_END

* fix comma in doc

Co-authored-by: Bernhard Elsner <40762178+bame-da@users.noreply.github.com>

Co-authored-by: Bernhard Elsner <40762178+bame-da@users.noreply.github.com>
2020-10-02 15:30:53 +02:00
Bernhard Elsner
331ee44978
Documentation of our support and compatibility framework (#7458)
* Documentation of our support and compatibility framework

CHANGELOG_BEGIN
CHANGELOG_END

* Update docs/source/daml-integration-kit/index.rst

Co-authored-by: Moritz Kiefer <moritz.kiefer@purelyfunctional.org>

* Update docs/source/support/component-statuses.rst

Co-authored-by: Moritz Kiefer <moritz.kiefer@purelyfunctional.org>

* Address feedback

* Update docs/source/support/compatibility.rst

Co-authored-by: Gerolf Seitz <gerolf.seitz@daml.com>

* Add Deprecations and address feedback

* Fix short title underline

* Apply suggestions from code review

Co-authored-by: Gerolf Seitz <gerolf.seitz@daml.com>

* Improve sentence on Integration Kit

* Imprive SemVer TLDR

* Uncapitalize release candidate

* Fix release timeline image

* Make the DAML Language Server CLI a Labs feature

Co-authored-by: Moritz Kiefer <moritz.kiefer@purelyfunctional.org>
Co-authored-by: Gerolf Seitz <gerolf.seitz@daml.com>
2020-09-24 14:40:57 +00:00
Sofia Faro
20732edc32
Fix GSG environment variable setup instructions. (#7465)
* Fixes #7451 by telling users to use `$HOME/.daml/bin` instead of `~/.daml/bin` when setting up the PATH variable.

In addition, this PR streamlines the instructions a bit by not telling users to restart their computers (they only need to restart the terminal) and by verifying the variables only after setting them both up, so they only need to restart the terminal once (without jumping around the instructions).

changelog_begin
changelog_end

* reinstate some restarts

* Emphasize that it is the Terminal app from macOS
2020-09-23 15:49:31 +00:00
Moritz Kiefer
8d66817f1d
Remove redundant --force from npm invocations (#7358)
NPM doesn’t actually need this (at least it didn’t for me locally and
hopefully CI agrees) to pick up changes and it emits a very
scary-looking warning if you do pass it.

changelog_begin
changelog_end
2020-09-09 13:28:24 +02:00
anthonylusardi-da
86c637b43d
Add links to get forum badges at the end of the GSG sections (#7327)
* Add links to get forum badges at the end of the GSG sections

* CHANGELOG_BEGIN
CHANGELOG_END
2020-09-08 12:47:55 -04:00
Robin Krom
678a8eef71
Replace yarn with npm (#7222)
* replace yarn with npm in docs

CHANGELOG_BEGIN
CHANGELOG_END

* updating assistant and compatibility tests

* moved gitignore entry to toplevel
2020-09-08 12:07:04 +02:00
Gary Verhaegen
4f2bd150b9
focus SDK install page (#7131)
- Put Windows first, and add a direct link to the installer.
- Move the manual step to a separate page.
- Link to AdoptOpenJDK as they have by far the simplest download page.

CHANGELOG_BEGIN
CHANGELOG_END
2020-08-18 15:34:28 +02:00
Moritz Kiefer
a9fcf965ba
Document required nodejs version (#6891)
We’ve had a few confused users run into issues because of
this. `fsevents` (which is basically impossible to avoid as a
dependency) requires NodeJS 8.16 but for some reason Ubuntu 18.04
sticks to the unsupported 8.10.

changelog_begin
changelog_end
2020-07-28 11:27:55 +02:00
Moritz Kiefer
2c10c4444b
Extend daml new to accept template as an option (#6877)
* Extend `daml new` to accept template as an option

The two positional arguments keep confusing users so this PR changes
things to allow the template to be passed via `--template`. Using a
positional argument still works so this is not breaking.

I’ve updated all docs to use the less confusing syntax.

changelog_begin

- [DAML Assistant] You can now use ``daml new project-name
  --template=template-name`` instead of ``daml new project-name
  template-name``. The old CLI syntax continues to be supported.

changelog_end

* Update docs/source/getting-started/index.rst

Co-authored-by: Martin Huschenbett <martin.huschenbett@posteo.me>

Co-authored-by: Martin Huschenbett <martin.huschenbett@posteo.me>
2020-07-27 16:30:48 +02:00
Nemanja
848a19d207
Linking the cheat-sheet to the GSG (#6398)
Added a new section in the cheat-sheet for basic DAML concepts (there's anotehr PR for it). This PR links the cheat-sheet to the GSG. This was a requirement that came out of the user tests where testers said that they would like to have a quick overview of the most important DAML concepts explained (they found jumping through the glossary and the rest of the docs too complicated).

CHANGELOG_BEGIN
CHANGELOG_END
2020-06-26 15:43:33 +02:00
Nemanja
87c17bb4e9
Yarn install workaround for noobs (#6426)
Noobs had a problem running yarn install v1.12.3
[1/4] Resolving packages...
success Already up-to-date.
Done in 0.40s. second time around when they^ve changed the code. Simply put they would way too often (almost alqways) forget to include  when calling yarn install v1.12.3
[1/4] Resolving packages...
success Already up-to-date.
Done in 0.34s.. This would be a very simple workaround that woould lead to them being aware from the very first step that there's the  parameter that needs to be called.

CHANGELOG_BEGIN
CHANGELOG_END
2020-06-23 17:38:09 +02:00
Nemanja
0dd631c6aa
JAVA_PATH and PATH instruction settings (#6341)
* PATH instruction settings

We've been getting the same feedback now for two users tests that users have somewhat hard time figuring out how to set the  variable. Also tonce they download the SDK the somehow miss ghe message/instructions that they need to add  to variable

CHANGELOG_BEGIN
CHANGELOG_END

* Added own instructions for setting the variables

* Added the necessary headers

* Fixed the title underline too short

* Update docs/source/getting-started/path-variables.rst

Co-authored-by: Moritz Kiefer <moritz.kiefer@purelyfunctional.org>

* Update docs/source/getting-started/path-variables.rst

Co-authored-by: Moritz Kiefer <moritz.kiefer@purelyfunctional.org>

* Update docs/source/getting-started/path-variables.rst

Co-authored-by: Moritz Kiefer <moritz.kiefer@purelyfunctional.org>

* Update docs/source/getting-started/installation.rst

Co-authored-by: Moritz Kiefer <moritz.kiefer@purelyfunctional.org>

* Addressing Moritz's and Samir's feedback

* Single and double quotes fix

* Update docs/source/getting-started/installation.rst

Co-authored-by: Moritz Kiefer <moritz.kiefer@purelyfunctional.org>

* Update docs/source/getting-started/path-variables.rst

Co-authored-by: Moritz Kiefer <moritz.kiefer@purelyfunctional.org>

* Restarting the computer wording fix

* Bash/shell wording fix

Co-authored-by: Moritz Kiefer <moritz.kiefer@purelyfunctional.org>
2020-06-16 10:21:40 +02:00
Nemanja
2f58e31b6c
GSG navigation hierarchy based on user feedback (#6339)
In user tets users complained that they were missing an overview of how all the components in the GSG are connected. This is a very simple fix addressing it: the 'App Architecture' and 'Your First Feature' sections are moved to be on the same level as 'Build Your App'

CHANGELOG_BEGIN
CHANGELOG_END
2020-06-15 09:41:28 +02:00
Nemanja
e0614d94e0
GSG Next steps (#6340)
After going through the GSG users were not sure what are the next steps. Adding the next steps at the end of the GSG is an easy fix for this,

CHANGELOG_BEGIN
CHANGELOG_END
2020-06-15 09:41:09 +02:00
Rohan Jacob-Rao
68ff2de123
GSG: update outdated text and add a link (#6281)
* Update MessageList explanation

* Update MessageEdit description

* Link to testing guide at the end of first feature

CHANGELOG_BEGIN
CHANGELOG_END
2020-06-10 09:49:07 -04:00
Nemanja
1fa70e7e4a
Small wording fixes for the GSG basedon user feedback (#6136)
CHANGELOG_BEGIN
CHANGELOG_END
2020-05-28 17:32:09 +00:00
Oliver Bunting
e016f2f9f6
Fix spelling mistake (#5840)
CHANGELOG_BEGIN
  CHANGELOG_END
2020-05-06 08:20:47 +02:00
Rohan Jacob-Rao
12c98a5c12
create-daml-app test: Move back to daml start (#5637)
Previously we changed to running the sandbox and JSON API separately to
have more control over port allocation. Now the same behaviour is
possible using `daml start`, which is preferable because it's what we
suggest users of the Getting Started Guide should use. This change
returns to using `daml start` in the end-to-end test. We use the default ports
for the sandbox and JSON API as we do in the guide.

changelog_begin
changelog_end
2020-04-20 16:30:51 -04:00
Rohan Jacob-Rao
631b5ddcd0
create-daml-app-test: Run sandbox and JSON API server separately and wait on port files (#5615)
changelog_begin
changelog_end

* Be a bit more generous with the login/logout test timeout
* Use fsPromises.stat and remove port files before starting to be safe
2020-04-18 18:54:53 -04:00
Rohan Jacob-Rao
37ca4af529
create-daml-app: Add end-to-end tests to integration tests (#5540)
This PR gets yarn test running the Puppeteer end-to-end tests in the GSG integration test.

The first step of the test is adding the extra dependencies (Jest, Puppeteer and more). The GSG recommends a yarn add command, but this does not work against HEAD. This is because yarn add does not use resolutions in the parent package.json, and then complains about unknown versions 0.0.0 of the daml TS libaries. The solution here is to hack in the extra dependencies into the ui/package.json and then yarn install. This works, but it hard codes version numbers which we would need to maintain. I would like to be able to say version "latest", which is what yarn add would install.

The next step of the test is to copy the index.test.ts file and run yarn test in CI mode.

I've moved the GSG test to a new create-daml-app-tests target. It's marked "exclusive" in Bazel until we figure out how to avoid hardcoding port numbers. This is a bit tricky since the HTTP port is hardcoded in a couple of places in ui/package.json.

Finally, this PR gets the GSG testing docs to reference the code in the new templates/create-daml-app-test-resources folder.

changelog_begin
changelog_end
2020-04-17 12:42:24 -04:00
Moritz Kiefer
a3cad2d6b8
Change gpg keyserver used in the docs (#5538)
pgp.keyserver.io seems to have lost our key
somehow. pool.sks-keyservers.net is the pool that includes the MIT gpg
keyserver and others so hopefully it is somewhat reliable.

changelog_begin
changelog_end
2020-04-13 11:26:10 +02:00
Rohan Jacob-Rao
7fafe6a08a
GSG: test messaging feature and remove copied code snippets (#5507)
* Diff with messaging feature and some noise manually removed

* Bazel target to use patch file in other build targets

* Patch file as data dep for integration tests

* Attempt to patch and test messaging feature in create-daml-app test

changelog_begin
changelog_end

* Use exports_files instead of filegroup

* Remove file existence checks that don't make sense

* Add patch to dev_env and reference it from integration tests

* Include patch on windows for later

* Set up yarn env again after codegen

* Restore file check

* Fix typo in comment on util function

* Add Tasty steps to make process explicit

* Use messaging patch for code snippets in GSG

* Use messaging code from template instead of copy

* Remove copied message code

* Refactor script to copy template code with messaging patch

* No need to retry second yarn install (only local deps should be updated)
2020-04-11 19:53:44 +00:00
Moritz Kiefer
e70ac2efbb
Fix links to typescript libraries (#5531)
changelog_begin
changelog_end
2020-04-10 20:17:11 +02:00
Moritz Kiefer
1ddcd3c096
Add a note that vscode needs to be restarted (#5503)
changelog_begin
changelog_end
2020-04-08 20:28:42 +02:00
Moritz Kiefer
15c68ee3b5
Remove extraneous backslash (#5502)
I don’t consider this a release blocker but still worth fixing.

changelog_begin
changelog_end
2020-04-08 18:15:58 +00:00
Martin Huschenbett
cdd342c5a3
Getting Started: Explain success for yarn start (#5492)
Exlain how to spot when `yarn start` was successful.

CHANGELOG_BEGIN
CHANGELOG_END
2020-04-08 11:45:25 +00:00
Moritz Kiefer
a96e7425ea
Add a yarn install --force step to make sure changes are picked up (#5489)
Yarn does not pick up changes to file: dependencies and link:
dependencies are unusable because Windows so we add an explicit
install step that refreshes them. It doesn’t make any sense to do
dependency resolution again here and could break something for
unrelated reasons so I added --frozen-lockfile as well.

changelog_begin
changelog_end
2020-04-08 12:15:42 +02:00
Moritz Kiefer
8d56ed3a7e
Consistently avoid infix syntax in the GSG and reinstantiate dlint (#5483)
We avoided infix syntax here for `elem` but still used it for
`notElem` which doesn’t make much sense. Also we lost the config to
disable the lint when integrating the example in this repo. This
resulted in our own code producing a lint which is obviously a bad
idea.

side note: I think this lint does make sense once you
are familiar with the syntax and I feel slightly bad about disabling
more and more lints so for now I’m keeping it in the config.

changelog_begin
changelog_end
2020-04-08 09:40:50 +02:00
Martin Huschenbett
e2a02ca78c
Getting Started guide: Remove useless yarn build (#5482)
The call to `yarn build` in the Getting Started guide is completely
useless for everything that follows (it would only be necessary if you
want to deploy the app) and quite time consuming. Let's just remove it!

CHANGELOG_BEGIN
CHANGELOG_END
2020-04-08 07:31:00 +00:00
Moritz Kiefer
aca282bc56
Fix choice name in GSG (#5481)
User is the template not the choice. The choice is called SendMessage.

changelog_begin
changelog_end
2020-04-08 07:00:08 +00:00
Moritz Kiefer
06b99327ac
Remove GSG disclaimer (#5469)
changelog_begin
changelog_end
2020-04-07 17:00:18 +00:00
Nemanja
59c020442b
Added daml2js diagrams (#5451)
CHANGELOG_BEGIN
CHANGELOG_END
2020-04-07 10:54:40 +02:00
Robin Krom
044783ef72
language:docs: correct TypeScript/JavaScript typings (#5421)
We use the official typings, i.e. TypeScript/JavaScript.

CHANGELOG_BEGIN
CHANGELOG_END
2020-04-06 17:24:44 +02:00
Gerolf Seitz
a2d785e3ee
Use com.daml as root package (#5343)
Packages com.digitalasset.daml and com.daml have been unified under com.daml

Ledger API and DAML-LF DEV protos have also been moved from `com/digitalasset`
to `com/daml` on the file system.
Protos for already released DAML LF versions (1.6, 1.7, 1.8) stay in the
package `com.digitalasset`.

CHANGELOG_BEGIN
[SDK] All Java and Scala packages starting with
``com.digitalasset.daml`` and ``com.digitalasset`` are now consolidated
under ``com.daml``. Simply changing imports should be enough to
migrate your code.
CHANGELOG_END
2020-04-05 19:49:57 +02:00
Rohan Jacob-Rao
3895c2d01f
Replace quickstart with new getting started guide (#5392)
* Move quickstart to java bindings section

* Change title of quickstart to Getting Started with ...

* Move GSG to Getting Started (and rename in index)

* Rewrite a bunch of references to quickstart

* Update reference and give more specific name

changelog_begin
- [Docs] Replace IOU quickstart with full stack Getting Started Guide
changelog_end

* Replace daml-ledger link

* Use getting started guide in redirects
2020-04-03 15:44:19 +00:00
Martin Huschenbett
ccfb17c91b
Rename daml codegen ts to daml codegen js (#5409)
I've completely removed the possibility to call `daml codegen ts`. I'm
happy to add in back in a followup PR once I've seen that all our tests
pass without it existing.

CHANGELOG_BEGIN
CHANGELOG_END
2020-04-03 14:54:46 +00:00
Martin Huschenbett
ba27ea9af4
create-daml-app: Import generated package without version (#5423)
Our plan for `daml2js` is to populate the `name` and `version` field
of the generated `package.json` files with the name and version of
the input DALF. Once this is done, you would expect to refer to the
package generated from `create-daml-app-0.1.0.dar` via
```typescript
import ... from '@daml.js/create-daml-app';`
```

Since we currently depend on the package by file paths anyway, we can
already pretend to have the right behavior in place.

In this style you can also depend on two different versions of the same
DAML package. This will happen during upgrades, a situation we're
already facing in DAVL. There it can be solved via the following two
lines in the `dependencies` field of the `package.json`:
```
  ...
  "davl-v4": "file:../daml.js/davl-0.0.4",
  "davl-v5": "file:../daml.js/davl-0.0.5",
  ...
```

CHANGELOG_BEGIN
CHANGELOG_END
2020-04-03 15:58:16 +02:00
Martin Huschenbett
7cf5018c5b
Move puppeteer tests out of create-daml-app (#5420)
As expected, the `puppeteer` library used to demonstrate how to test
DAML apps end-to-end, causes issues in CI. It is not very unlikely
that users of the getting started guide would run into the same issues.
In addition, `puppeteer` is a _huge_ dependency, we should probably not
shove down everybody's throat who just wants to walk throught the GSG.

Thus, this PR moves everything related to testing out of
`create-daml-app` and exclusively into the docs. This is completly
lacking tests, but since it wasn't tested before either, I consider
this acceptable. My manual tests succeeded.

Since merging this might unblock quite a few other PRs, I defer test
into a followup PR.

CHANGELOG_BEGIN
CHANGELOG_END
2020-04-03 14:59:18 +02:00
Rohan Jacob-Rao
6d9db3fea3
GSG: use code samples from the template instead of manual copies (#5396)
* Copy templates into docs build directory to reference in code snippets

changelog_begin
changelog_end

* Remove ui-before code copies

* Rename daml folder to daml-after and remove tags for before code

* Fix a link and wording
2020-04-03 13:18:18 +02:00
Martin Huschenbett
7431a96fc6
Getting Started Guide: Generate JS into daml.js (#5390)
Change the output directory given to `daml codegen ts` from `daml-ts`
to `daml.js`. This is naming is in line with the fact that `daml2ts`
puts all generated packages into the `@daml.js` scope. A renaming of
`daml2ts` into `daml2js` is immiment.

This PR also changes a few small documentation issues the
search-and-replace has surfaced.

CHANGELOG_BEGIN
CHANGELOG_END
2020-04-02 21:02:27 +00:00
Moritz Kiefer
82fc85e585
Fix daml new command in GTG (#5385)
changelog_begin
changelog_end
2020-04-02 19:10:46 +02:00
Rohan Jacob-Rao
0f5d93e0c3
Include create-daml-app as a template project for daml new (#5259)
* Initial commit with create-daml-app master

* Include create-daml-app in build rule

* Make daml.yaml a template in version and project name

* Remove git attributes

* Remove license and azure config

* Remove scripts

* Don't overwrite config files in build rule

* Template version numbers in package.json, to be replaced by the assistant

* Rename to package.json.template

changelog_begin
changelog_end

* Add copyright headers

* Do template substitutions in all .template files

And don't special case daml new create-daml-app (so it treats it as a
regular template).

* Add create-daml-app to integration tests

* Remove WIP warning

* Move towards setup that works on head

* Make local copies of the TS libs in the templates tarball

* Hardcode project name for now

* Use isExtensionOf

* Remove service worker

* remove robots.txt (don't even know what it is)

* Revert "Make local copies of the TS libs in the templates tarball"

This reverts commit 1289581fb4a82af3ab534baf978a2c6ed895d538.

* Retemplatize TS lib versions. For head builds these will be installed using npm

* Remove daml/ledger from resolutions for daml-ts

* Comment about test secret

* Remove special create-daml-app assistant command and test that won't work anymore

* Remove redundant imports and export

* Remove old create-daml-app tests

* Remove yarn.lock

* Clean up integration test (just daml new and build atm)

* Add daml/ledger as a resolution for daml-ts

* Remove top level package.json

* Update daml.js version

* Use new import scheme for generated TS

* Update readme with new codegen and build steps

* Use start-navigator in daml.yaml

* Increase a couple of timeouts in tests (either sandbox or TS lib is a bit slower?)

* Update GSG intro with new build steps

* Remove daml2ts -p flag and --start-navigator flag from GSG instructions

* Don't use start-navigator flag in ui tests

* Temporary readme describing how to manually test the create-daml-app template

* Update code samples in app arch section of GSG

* Update code samples in testing doc

* Remove copied create-daml-app code

* Indent docs markers to be more subtle

* Update visible code in Messages (after) section

This needs to be kept up to date properly somehow.

* Update text to useLedger

* Restore code/ui-before copies until the Bazel magic is figured out

We need to make the template code a dependency in the Bazel rule as
otherwise we can't find the files in the docs build.

* Update create-daml-app/readme and make templates/readme more detailed

* Use jsx comments for docs markers so they don't show up in the app
2020-04-02 00:30:07 +00:00
Gerolf Seitz
329320bad9
Organize maven coordinates (#5272)
* Use com.daml as groupId for all artifacts

CHANGELOG_BEGIN
[SDK] Changed the groupId for Maven artifacts to ``com.daml``.
CHANGELOG_END

* Add 2 additional maven related checks to the release binary

1. Check that all maven upload artifacts use com.daml as the groupId
2. Check that all maven upload artifacts have a unique artifactId

* Address @cocreature's comments in https://github.com/digital-asset/daml/pull/5272#pullrequestreview-385026181
2020-04-01 11:41:18 +02:00
Gerolf Seitz
9b5c5e23b9
Make wall clock time the default time mode for sandbox (#5301)
CHANGELOG_BEGIN
[Sandbox] Wall Clock Time mode (``--wall-clock-time``) is now the
default.
CHANGELOG_END
2020-04-01 08:53:16 +02:00
Nemanja
aee8a2485f
Added screenshots to the GSG (#5233)
* Added screenshots to the GSG

CHANGELOG_BEGIN
CHANGELOG_END

* Added copyright headers to theme/conf.py
2020-03-31 15:05:09 +02:00
Rohan Jacob-Rao
9d73aec229
GSG: update code samples (#5224)
* Update code in before section

* Update code in 'after' section, i.e. for messaging

changelog_begin
changelog_end

* Typo with END taggit st
2020-03-27 09:16:15 +01:00
Gary Verhaegen
1872c668a5
replace DAML Authors with DA in copyright headers (#5228)
Change requested by Manoj.

CHANGELOG_BEGIN
CHANGELOG_END
2020-03-27 01:26:10 +01:00
Robert Autenrieth
a3ddde3a9d
Remove MRT and LET (#5172)
Contributes to #4194.
Closes #4231.
Closes #5022.
CHANGELOG_BEGIN
- [Ledger API] The protobuf fields ledger_effective_time and maximum_record_time have been removed from
  command submission. These fields were previously deprecated following the introduction
  of a new ledger time model. See issue `#4194 <https://github.com/digital-asset/daml/issues/4194>`__.
[Java Bindings] removed the usage of ledgerEffectiveTime and
maximumRecordTime, and instead added minLedgerTimeAbsolute and
minLedgerTimeRelative in CommandSubmissionClient and CommandClient
CHANGELOG_END
2020-03-25 16:50:27 +01:00
Luciano
4610ed5b4f
Getting Started Guide: Update codegen command to SDK 0.13.55 (#5160)
* remove `src` subdir from codgen command

If you don't do this, running `yarn install` will complain:
```
error Couldn't find package "@daml-ts/create-daml-app-0.1.0@0.13.55" required by "create-daml-app@0.1.0" on the "npm" registry.
```
This was with yarn v1.22.4 - can someone please double-check this.

* Update codegen command and some surrounding explanation

Unfortunately also removed a bunch of trailing whitespace due to my
editor settings, which is fine but makes reviewing harder :(

changelog_begin
changelog_end

* Warn that workspaces run build takes ages

Co-authored-by: Rohan Jacob-Rao <rohanjr@gmail.com>
2020-03-24 16:23:06 +00:00