Commit Graph

534 Commits

Author SHA1 Message Date
Gary Verhaegen
b0f042ed27
get-daml: accept v (#18413) 2024-02-07 17:31:07 +01:00
Paul Brauner
35e255e6b0
Address LF2 TODOs in the daml repo (#18386)
run-all-tests: true
2024-02-06 10:45:28 +01:00
Samuel Williams
0f22d1a0b0
Remove/Upgrade hs-bindings (#18362)
* Remove/Upgrade hs-bindings

* Format canton/BUILD

* Disable check that contracts get archived on hot-reload
2024-02-02 15:23:19 +00:00
mziolekda
90d90ea759
remove scala bindings and ledger-api-client (#18301)
* remove scala bindings from daml-script

* remove bindings-pekko

* clean test-common

* clean rx-java

* clean the rest

* remove ledger and scala-bindings

* format

* correcting from code-review
2024-01-29 17:28:14 +00:00
azure-pipelines[bot]
c62c9d4eea
update canton to 20240122.12366.0.v932e06e9/3.0.0-snapshot.20240122.12366.0.v932e06e9 (#18248)
* update canton to 20240122.12366.0.v932e06e9/3.0.0-snapshot.20240122.12366.0.v932e06e9

tell-slack: canton

* fix canton/BUILD.bazel

* fix the bootstrap scripts of the integration tests

---------

Co-authored-by: Azure Pipelines Daml Build <support@digitalasset.com>
Co-authored-by: Paul Brauner <paul.brauner@digitalasset.com>
2024-01-23 17:43:22 +00:00
azure-pipelines[bot]
d88dbfcd6b
update canton to 20240119.12351.0.v919e4e65/3.0.0-snapshot.20240119.12351.0.v919e4e65 (#18228)
* update canton to 20240119.12351.0.v919e4e65/3.0.0-snapshot.20240119.12351.0.v919e4e65

tell-slack: canton

* Move package service from v0 to v30

To adapt to: https://github.com/DACH-NY/canton/pull/16527/files#diff-ab9f2213eb571819e86f0623cdd806c3603cfce1337f2a48e3453843cd97f7aa

* Remove -x suffix from participants/sequencers/mediators config

to adapt to https://github.com/DACH-NY/canton/pull/16486/files#diff-4072c28eb5ca7db19525b30a6f02f38284470f4d0deda2ade3ce6a686805f8f4

run-all-tests: true

* Take advantage of ledger-api party-notication fix in canton

https://github.com/DACH-NY/canton/issues/16073

run-all-tests: true

* Fix remote-domains -> remote-sequencers

---------

Co-authored-by: Azure Pipelines Daml Build <support@digitalasset.com>
Co-authored-by: oliverse-da <oliver.seeliger@digitalasset.com>
2024-01-23 12:10:40 +01:00
Paul Brauner
d7c8e125c6
Make package metadata mandatory in the compiler (#18235)
* Make package metadata mandatory in the compiler

* remove metatada from worldSelf

* simplify mergePkgs
2024-01-22 14:20:03 +00:00
Moisés Ackerman
b5fbcf8e3a
Split DA.Test.Sandbox off //libs-haskell/test-utils into //libs-haskell/canton-test-utils (#18210) 2024-01-22 14:53:35 +01:00
Paul Brauner
aa5f01df3c
no more sleep after party allocation (#18225)
* fix wrong issue number in TODO

* remove sleeps after party allocation
2024-01-19 16:22:05 +00:00
Paul Brauner
6393fd084c
Remove LF1 in the compiler (#18203)
* make lf v2 and daml3-script the default

* delete V1 integration tests

* Remove LF major version V1 from the compiler

run-all-tests: true

* fix security evidence

* fix //compiler/damlc/tests:damlc-test

* fix //compiler/damlc/tests:data-dependencies

* fix //compiler/damlc/tests:integration-v2*

* fix //compiler/damlc/tests:packaging

* fix //compiler/damlc/tests:platform-independence-dar-hash-file-matches

* fix //compiler/damlc/tests:stable-packages

* fix DarReaderTest.scala

* fix DecodeCommonSpec.scala

* fix //daml-lf/archive:proto_immutability_check

* fix DamlLfEncoderTest.scala

* fix //language-support/java/codegen:test

* fix //daml-assistant/integration-tests:integration-tests

* fix artifacts.yaml

run-all-tests: true
run-full-compat: true

* Disable scenario-perf for now

See https://github.com/digital-asset/daml/pull/18217.

run-all-tests: true
run-full-compat: true

* restore explicit target version in docs template

run-all-tests: true
run-full-compat: true

* Restore DamlLfEncoderTest.scala.

Introduce a ENGINE_LF_VERSIONS constant in daml-lf.bzl instead.

run-all-tests: true
run-full-compat: true

* delete daml-lf/scenario-interpreter/src/perf

run-all-tests: true
run-full-compat: true

* Address review comments.

* Apply

Co-authored-by: Moisés Ackerman <6054733+akrmn@users.noreply.github.com>

* Restore golden/BUILD.bazel and port to 2.1

run-all-tests: true
run-full-compat: true

---------

Co-authored-by: Moisés Ackerman <6054733+akrmn@users.noreply.github.com>
2024-01-19 15:19:34 +00:00
Paul Brauner
7ac69ceb2e
Pb/build daml against canton3 (#18103)
* Rename canton-3x to canton

* fix build

* fix BuildInfo for canton 3

* add reference drivers as a runtime dep to community_domain

* target 2.1 in interface-choices-valid

* run damlc integration tests with LF2

* fix the repl tests

* fix repl-functests

* fix package manager test

* disable V1 scala integration tests

* port the scala canton fixture to canton3

* fix JsonApiIt, using sleeps :/

* fix test-daml-packages and test-daml-ledger under //daml-assistant/daml-helper

* fix integration tests

* fix QuickstartTest.hs

* fix //daml-script/export/integration-tests/reproduces-transactions:test

* fix //daml-script/runner:tests

* fix Daml3ScriptDevIT

* fix Daml2ScriptTestRunner

* remove sleeps in functests now that a delay has been added to daml3-script's allocateParty

* fix //language-support/java/codegen:ledger-tests

* fix ScalaCodeGenIT

* remove useless sleep

* fix //language-support/ts/codegen/tests:build-and-lint-test

* remove redundant sleep and fix daml script

* fix //daml-assistant/daml-helper:test-tls

* fix CommandClientIT

* fix //daml-assistant/daml-helper:test-deployment

* Remove duplicate contract key test: not supported by canton 3.

run-all-tests: true

* fix //language-support/hs/bindings:test

run-all-tests: true

* small cleanups

run-all-tests: true

* clean up and fix compat tests

* fix build after rebase

run-full-compat: true
run-all-tests: true
2024-01-17 18:11:24 +01:00
Gary Verhaegen
c6ed4427ee
remove create-daml-app (#18173)
Why?

This is a terrible introductory application. We have no expertise in web
development (it's terribly outdated and we don't have the knowledge to
update it), so steering newcomers in that direction is disputable at
best. This example (and the associated documentation) spends more time
discussing (a very old version of) TypeScript than Daml. The use-case
presented is not one that showcases the strength of either the Daml
language or the underlying Canton ledger. It's not even a distributed
application as it assumes a single ledger.

At best, this template presents Daml as a DDL for simple wep API
definitions, but one where the resulting generated code provides no
support for authentication, external API calls, or any common
server-side tasks like sending emails.

Why now?

As we start working in parallel on 2.9 and 3.0, we are faced with the
perspective of having to do two weekly snapshots and thus having to test
both of them. Removing create-daml-app from the 3.0 branch alleviates
the testing burden quite a bit.

Daml 3.0 will be a long-term effort, and we have plenty of time to figure
out what should replace create-daml-app for this new version. If this
template was bad at showcasing Daml 2 strength, it's an even worse fit
for Daml 3.

Note that this PR removes a lot of additional tests, notably
compatibility ones. They live on in the main-2.x branch, where
compatibility tests also run.
2024-01-17 12:33:59 +00:00
Gary Verhaegen
179d85362d
update copyright (#18167)
* update copyright

* undo hack from #18168

* update hash in platform-independence-pre-check
2024-01-15 20:27:42 +01:00
dylant-da
1cefd77307
Document split release flag, document tarball in TARGET (#18097) 2024-01-15 18:16:44 +00:00
mziolekda
7108f2c76a
Remove triggers (#18142)
* remove triggers

* adopt the codebase to missing triggers

run-all-tests: true

* fix builid

* Remove oracle tests
2024-01-12 17:55:05 +01:00
mziolekda
bde7632208
Remove navigator (#18141)
* remove navigator

* remove all apart from assistant

* remove navigator from assistant

* remove navigator from release procedure

* remove mentions of navigator completely
2024-01-12 11:32:57 +00:00
mziolekda
f0a0c6d2c2
Remove http json (#18131)
* remove http json from daml-script

* remove http-json from ts

* remove http-json

* Fix daml-assistant

run-full-compat: true

* Fix broken test

* remove drepeated test

* remove commands running via http-json

* fix the build

* changes from code-review:

* anotehr attempt at fixing the build
2024-01-11 18:08:08 +00:00
Moisés Ackerman
89cdb8d8a0
Haskell SdkVersion inversion (#18066)
* Remove //:sdk-version-hs-lib

* Add //sdk-version/hs:sdk-version-{class-,}lib

* Use //sdk-version/hs:sdk-version-{class-,}lib instead of //:sdk-version-hs-lib

* Fix //daml-assistant/daml-helper:test-deployment

* Fix da-hs-base.cabal

* Fix daml-project-config.cabal

* Move DA.Service.Logger.Impl.GCP out of da-hs-base

This means that da-hs-base no longer depends on sdk-version-class-lib, so users of the cabal file don't need to make any changes

* Move version data types out of daml-project-config

* Now //sdk-version/hs:sdk-version-class-lib depends on //libs-haskell/da-version-types

* back to the past (fmt.sh)

* yarn.lock changes to appease fmt.sh
2024-01-09 10:24:31 +01:00
Samuel Williams
6a88119637
Multi package test (#17746)
* Multi package test scaffold and first batch

* Add next set of tests

* Rearrange, add source testing

* Explicit imports

* Install sdk in tests

* Blank setEnv is different to normal setEnv >:(

* Fix paths for windows

* Add daml.yaml changes tests (that fail)

* Update from comments, add sdk-version check

* Update tests to match changes to CLI behaviour
2023-12-19 11:03:29 +00:00
dylant-da
96485898f4
Fix issues with damlc with custom release version querying network (#17991)
Co-authored-by: Samuel Williams <samuel.williams@digitalasset.com>
2023-12-06 19:35:10 +00:00
dylant-da
40b5eb8476
Fix split release for deps (#17968)
* Resolve release version for sdk build checks

* lint

* lint

run-full-compat: true

* Simple test for using daml-script in release versions

* Fix build issues in tests using pSdkVersion

run-full-compat: true

* Fix build issues with DamlcIntegration

* fix bad sdk version being an invalid version

run-full-compat: true

* Fix the linux "mmap 4096 bytes at (nil): Cannot allocate memory" error

* Fix compat tests on Windows

run-full-compat: true

* test windows os correctly

run-full-compat: true

* temporarily disable canton_3x

run-full-compat: true

---------

Co-authored-by: Paul Brauner <paul.brauner@digitalasset.com>
2023-12-05 23:46:27 +01:00
mziolekda
34743570bd
Rewire the build to use ledger-api within canton (#17959)
* Rewire the build to use ledger-api within canton

* same for canton-3

* fix buf

* fix buf again

* remove references to canton from canton-3x
2023-12-04 16:11:13 +01:00
dylant-da
4d8e4995df
Add --install-with-custom-version, rename --allow-install-non-release (#17931)
* Add --install-with-custom-version, rename --allow-install-non-release

* Test install tarball via custom version in compatibility tests

run-full-compat: true
2023-12-04 10:31:28 +00:00
mziolekda
7e2aa7cece
Adopt the repository to the movement of java bindings (#17913)
* Make java bindings compile in new place

* fix a mysterious grpcurl error
2023-11-30 22:43:35 +01:00
Gary Verhaegen
6f457e872b
Allow install non release does not look for matching version (#17909) (#17918)
Co-authored-by: dylant-da <106664681+dylant-da@users.noreply.github.com>
2023-11-27 12:00:49 +01:00
dylant-da
8faad711fe
Fix split release breaking create-daml-app test (#17898)
Adding --allow-install-non-release=yes to withSdkResource fixes issues with integration tests in 2.8.0 release
2023-11-23 11:36:08 +00:00
dylant-da
234d003f0c
Supporting version splitting in Daml Assistant and Daml Compiler (#17682)
* initial implementation supporting version splitting in assistant

stubbed out implementations of resolveReleaseVersion/other resolution

* implement resolveReleaseVersionFromGithub

* continue work on fixing SDK/release version split

* First commit that successfully runs `daml-head install <split version>`

* fix tests

* Ignore snapshot/metadata for isHeadVersion

* remove log debugging

* Fix tests for getSdk

* refactor DA.Daml.Project.Types.defaultSdkPath

* enable incremental changes to version cache

* Allow resolveReleaseVersionFromGithub to fail via Either

* Split getSdkVersionFromSdkPath into get{Sdk,Release}VersionFromSdkPath

* Add resolveReleaseVersionFromDamlPath/Github to resolveReleaseVersion

* Add mock sdk config with version

* Remove getInstalledSdkVersions dependency on Cache

* add override for github version api endpoint, useful for mocking

* Add alternate-download to provide alternate tarball install resolution

* initial work on comprehensive autotester

* Copyright header

* fix build generation to have valid Main.daml

* improve error message for check_daml_install_nonzero

* Make killing miniserve processes more robust

* remove breakpoint

* Implement `daml build` tests

* Solve TODO in installExtracted to resolve sourceSdkVersion coherently

Supply useful error message with it.

* Return SdkVersion from sdkVersionFromReleaseVersion for typechecking

* Finish tests for tarball build, drop installed_already_behaviour

* Try to force-reload cache on tar failure, fix `Possible fix:` notes

* Add AllowInstallNonRelease as a flag

* Test allow_nonrelease, refactor, clean up setup_sandbox

* Move no_cache_override_github_endpoint API response into file

* Remove dead code, vestigial code

* Remove TODOs that no longer are relevant

* fix iAllowInstallNonRelease in InstallOptions for autoInstall

* Refactor alternateVersionLocation

* (Try to) lint language-support/ts/codegen/BUILD.bazel

* fix daml-assistant/test

* Enable allow_nonrelease post-build checks

* Remove writeFile debugging from DA.Daml.Assistant.Version

* Replace ../test-daml-yaml-install/test.sh with test-all-installs.sh

* lint

* more lint

run-full-compat: true

* Stop tracking API response in test-daml-yaml-install

* Move ReleaseResolution into Version

* remove extra deps, fixes daml-project-config-cabal-file-matches

* Move InstallLocation to minimize changes to DA.Daml.Project.Types

run-full-compat: true

* Create cachePath in daml-assistant tests that need it

* Bind to unused ports in test-all-installs.sh

run-full-compat: true

* Override via files instead of just URLs

run-full-compat: true

* Remove unused RELEASES_ENDPOINT

* Use dict keys instead of hardcoding in test-all-installs listing

* Refactor to remove check_daml_install_from_tarball_after_cache_reload

* Improve comment on update_cache

* Move shift before cases

* Add comment for unsafeParseReleaseVersion

* Rename unsafeParseReleaseVersion into unsafeParseOldReleaseVersion

* remove done todo

* Add some hungarian notation to resolveReleaseVersionFromDamlPath

* drop redundant let

* Define ordering over ReleaseVersion

run-full-compat: true

* use sdkVersion for codegen

* Use `urls` attribute in http_file, `url` is unsupported on Windows (!)

run-full-compat: true

* Remove unnecessary check for cache reload

run-full-compat: true

* Try use daml executable directly without daml-sdk-0.0.0

run-full-compat: true

* try force daml.exe to daml

run-full-compat: true

* Use daml.exe when windows is detected

* add windows tarballs for snapshots

* Fix most tests on windows, "line too long" breaks some tarball tests

run-full-compat: true

* Point to more recent snapshot post Moises's fixes

* Add os-specific tarball paths and alternate-download

run-full-compat: true

* Fix windows autoinstall with 0.0.0

run-full-compat: true

* Fix error message, remove daml_install_output catching

* Detect "The input line is too long" in other post_failed commands

* Fix missing releases endpoint, handle "cannot find the path specified"

run-full-compat: true
2023-11-22 14:24:13 +00:00
mziolekda
b81ee69abe
disentangle ledger api (#17831)
* make testing-utils independent of ledger-api

* remove dead files

* move non ledger-api stuff to libs-scala
2023-11-14 22:44:10 +01:00
Marton Nagy
6933514df5
Switch from Akka to Pekko (#17814)
* Automated renames by bash script

This commit is exclusively contains changes by the bash script.
For the bash script is present at the pull request.

* Manual pekko migration changes

* adapt fully qualified name references
* adapt pekko package declarations
* adapt bazel files with dependency changes
* adapt canton pekko lib shade_rule
* adapt logger configuration declarations
* pin maven dependencies
* revert incorrect changes by script to compatibility module

Workarounds for further TODOs:
* disable http-json-perf and libs-scala/gatling-utils modules to maintain clean pekko dependencies (without akka)
* disable GraphQLSchemaSpec test (sangria library needs to be upgraded)

* Formatting
2023-11-13 23:22:22 +00:00
Remy
6ef062dac9
Revert "Nmarton/pekko rebased (#17789)" (#17796)
This reverts commit d310692d1b.

@remyhaemmerle-da messed up and merged the PR too fast.
2023-11-09 21:23:18 +00:00
Marton Nagy
d310692d1b
Nmarton/pekko rebased (#17789)
* Scala upgrade to 2.13.11
* Switch from akka to pekko
* Also disable gatling based libs to start from a clean stage
2023-11-09 18:17:33 +01:00
Moisés Ackerman
3512b5eb4d
Embed bash and zsh completion scripts into daml-assistant (#17675)
* Update optparse-applicative dep to 0.17.1.0

* Update entropy dep to 0.4.1.10

* Embed bash and zsh completion scripts into daml-assistant
2023-10-27 17:23:20 +02:00
dylant-da
845b486e56
Add test-daml-version-and-install script, fix more updating issues (#17599)
* Add test-daml-version-and-install script, fix more updating issues

* Test `daml install`, improve checks for snapshots.txt

run-full-compat: true

* bring diff into scope for test-daml-version-and-install.sh

* Use runfiles to locate daml in test-daml-version-and-install.sh

* Bound versions.is_at_least("2.7.5") for test-daml-version-and-install.sh

run-full-compat: true

* Add logged diffing to diagnose issue

run-full-compat: true

* Add diff to data of test-daml-version-and-install.sh

run-full-compat: true

* Fix `daml install` call breaking - cache should still be refreshed

* Address minor issues: Daml 10.x.y matching, quoting, wrong comment

run-full-compat: true

* Drop printing

* Improve logging for test-daml-version-and-install.sh

* Fix undercased variable name DAML_CACHE, rerun CI

run-full-compat: true

* disable on windows

run-full-compat: true
2023-10-24 11:48:11 +00:00
dylant-da
a0fe6fe532
Fix version caching (#17581)
* Make at least one call API if there is no cache

* document why we don't use /repos/{owner}/{repo}/releases/latest

* Refactoring

* Improve name - envLatestStableSdkVersion is only used in one location

* `daml install latest` overrides update-check in daml-config.yaml

* Improve comments for cacheAvailableSdkVersions

* lint

* Drop lookup for UpdateCheckNever

https://dev.azure.com/digitalasset/daml/_build/results?buildId=151669&view=logs&jobId=870bb40c-6da0-5bff-67ed-547f10fa97f2&j=870bb40c-6da0-5bff-67ed-547f10fa97f2&t=fdc575a5-c2b4-5f52-8465-2c7aa3e12574
reports
daml: Snapshot versions list from https://api.github.com/repos/digital-asset/daml/releases does not contain valid JSON
  context: Fetching list of available SDK versions
  details: Error in $: expected Array, but encountered Object

I assume this is because the request returned some sort of failure
2023-10-17 17:32:05 +01:00
Gary Verhaegen
4c1631e89c
fix get-daml for macOS/BSD sed (#17562) 2023-10-16 08:47:46 +00:00
Samuel Williams
03bb8bfee2
Update daml-assistant to support new versioning (#17553) 2023-10-12 09:12:49 +01:00
Gary Verhaegen
3ff37fc0b6
get.daml.com: support dissociated daml <> sdk versions (#17550) 2023-10-11 18:14:56 +02:00
Samuel Williams
5eb2696deb
Implement multi-package.yaml CLI (#17267)
* First working model (requires ghcide changes)

* Bug fixes, add logging

* Use pinned ghcide

* Comment up a storm

* Add multi sdk version support

* Implement project.yaml approach

* Cleanup

* Add projects to multi-package.yaml

* Add flags for build all projects in multi-project, and no caching

* Delete ghcide

* Start migration from daml multi-build to daml build

* Add non --all daml build flow

* Finish migration over to daml build

* Add comments

* Change --all and --no-cache to switches

* Fix caching issue with source set to .

* Address initial comments

* Add daml.yaml source as a file caching warning

* Forward sub-assistant call errors to multi-build

* Update comment

* Update merged ghcide
2023-10-11 13:50:55 +01:00
Paul Brauner
a5cd445d3b
Introduce LF2 major version (#17348)
- Introduces a new major version, "2", in the daml_lf proto
- Adds new major versions to the compiler and the engine
- Updates all code that assumes only one major version
- Updates all code that assumes only one dev version
2023-09-13 10:01:42 +02:00
Gary Verhaegen
4bf7693f42
fix cache (#17377)
Looks like the issue was Bazel 5.2.0.
2023-09-08 10:31:42 +02:00
Moisés Ackerman
6ae0e0111e
Upgrade to Bazel 5 (again) (#17319)
* Update to rules_haskell v0.16
* Update comments re bazel patches
* clean up bazel overrides
* Upgrade to Bazel 5.2.0
* Remove '--distinct_host_configuration=false'
* Update buildifier to 6.3.2
* Suffix macos and ubuntu caches with yyyymm
* bump windows cache to v14
* [REVERTME] bump linux/macos/darwin timeout to 4h
2023-09-01 15:15:36 +02:00
Samuel Williams
9179b2e7d0
Jar licensing (#17299)
* Add _distribute.jar target with correct license
Use it everywhere

* Fixes from review

* Change NOTICES to NOTICES.txt for consistency
2023-08-22 15:56:29 +01:00
azure-pipelines[bot]
2f4b494fa5
bump canton to 2.8.0-snapshot.20230804.10940.0.ve26becd2 (#17236)
bump canton to 2.8.0-snapshot.20230804.10940.0.ve26becd2

CHANGELOG_BEGIN
CHANGELOG_END

Co-authored-by: Azure Pipelines Daml Build <support@digitalasset.com>
Co-authored-by: Gary Verhaegen <gary.verhaegen@digitalasset.com>
2023-08-06 13:32:51 +02:00
dylant-da
760f879e35
Extract available snapshot versions from Github (#17029)
* Extract available snapshot versions from Github

* Refactor slightly, add comments

* Implement caching

* Make getLatest commands query the minimum number of times from Github

* lint

* filter out prereleases, fix naming

* Fix outdated reference `extractVersionsFromSnapshots` to extractReleases

* Retrieve all versions so that getLatest can prune old versions' patches

* Hide --snapshots, --all, and --force-reload flags from daml version

* Get isPrerelease check correct way around

* Thread UseCache to `daml install` and other commands

* Refactor getEnvLatestStableSdkVersion to defer sdk version extraction

* store envLatestStableSdkVersion thunk in struct so tests can override it

* Read environment var early in getLatestStableSdkVersion

I implemented this with `overrideWithEnvVarMaybe`, but it required some
rather opaque abuse of `fmap pure`, `sequence`, and `join`

* Replace hidden with internal so flags don't show up in help
2023-06-28 12:04:00 +00:00
Gary Verhaegen
f6a51dd083
clean up refresh-get-daml (#16994) 2023-06-15 09:49:07 +01:00
Gary Verhaegen
ed202d1861
refresh-get-daml-com: add invalidation & format (#16993)
* refresh-get-daml-com: add invalidation & format

* test update
2023-06-14 18:54:52 +00:00
Krisztian Pinter
fed6e1ab7a
Add cabal support for some components (#16755) 2023-06-05 17:07:31 +02:00
Gary Verhaegen
de6f31c4d8
canton: allow depending on arbitrary sha (#16926) 2023-06-01 15:06:35 +00:00
dylant-da
6058070637
Remove daml visualize / damlc visual (#16901)
* Remove daml visualize / damlc visual

* fix redundant imports

* remove visual-web subtest
2023-05-30 10:50:36 +01:00
Moisés Ackerman
e71c667778
Extract daml-dar-reader (#16786) 2023-05-02 16:17:23 +00:00