* Workaround for Hardhat timestamp bug
Likely due to a Hardhat bug in which the callbacks for subscription events are called and awaited before updating its local understanding of the last block time, Hardhat will report a block time in the `newHeads` event that is generally 1 second before the time reported from `getLatestBlock.timestamp`. This was causing issues with the OnChainClock's offset and therefore the `now()` used by the `OnChainClock` would sometimes be off by a second (or more), causing tests to fail.
This commit introduce a `codex_use_hardhat` compilation flag, that when set, will always get the latest block timestamp from Hardhat via the `getLatestBlock.timestamp` RPC call for `OnChainClock.now` calls. Otherwise, the last block timestamp reported in the `newHeads` event will be used.
Update the docker dist tests compilation flag for simulated proof failures (it was not correct), and explicitly add the `codex_use_hardhat=false` for clarity.
* enable simulated proof failures for coverage
* comment out failing test on linux -- will be replaced
* bump codex contracts eth
* add back clock offset for non-hardhat cases
* bump codex-contracts-eth
increases pointer by 67 blocks each period increase
* Add `codex_use_hardhat` flag to coverage tests
* extra utilities and tweaks
* add atlas lock
* update ignores
* break build into it's own script
* update url rules
* base off codexdht's
* compile fixes for Nim 1.6.14
* update submodules
* convert mapFailure to procs to work around type resolution issues
* add toml parser for multiaddress
* change error type on keyutils
* bump nimbus build to use 1.6.14
* update gitignore
* adding new deps submodules
* bump nim ci version
* even more fixes
* more libp2p changes
* update keys
* fix eventually function
* adding coverage test file
* move coverage to build.nims
* use nimcache/coverage
* move libp2p import for tests into helper.nim
* remove named bin
* bug fixes for networkpeers (from Dmitriy)
---------
Co-authored-by: Dmitriy Ryajov <dryajov@gmail.com>
* setup to use env variable for parallel tests
* use explicit targets
* use target in includes
* test windows split
* try simpler logic
* only use include in ci.yml
* add cpu
* fix name
* re-add unit tests!
* restore coverage
* not sure why env broke there
* startup node for part 1 & 2 tests
* fixup part 1 & 2 tests
* split windows into 3!
* Uses correct string for marketplace address
* first steps towards support for arm64
* Applies multiarch ubuntu dockerfile as codex-dockerfile.
* Add `--simulate-proof-failures` env variable, update docker-compose to point to slimmed image
* Add image to CI, and update startCodex.sh
* Sets up separate docker build for arm
* Update arm64 arm of docker ci
* [docker] modify startCodex.sh
- include overridden node name in log output if specified in test
- quote `—log-level` value so that multiple log levels can be specified
- ensure any CLI parameter env vars are passed through to the codex binary, instead of conditionally including them
- add `—persistence`
- add `—validator`
* fixes load and push for amd docker build
---------
Co-authored-by: Eric Mastro <github@egonat.me>
* [build] disable XCannotRaiseY hint
There are too many {.raises:[Defect].} in the
libraries that we use, drowning out all other
warnings and hints
* [build] disable BareExcept warning
Not yet enabled in a released version of Nim,
so libraries that we depend on have not fixed
this yet, drowning out our own hints and warnings
* [build] disable DotLikeOps warning
dot-like ops were an experiment that is not going
land in Nim
* [build] compile log statements in tests
When running tests, all log statements are compiled.
They are filtered out at runtime during a test run.
* [build] do not build executable when running unit test
It's already built in the integration test
* [build] Fix warnings
- remove unused code
- remove unused imports
- stop using deprecated stuff
* [build] Put compiler flags behind nim version checks
* [CI] remove Nim 1.2 compatibility
* Sets up working dockerized build and codex docker image creation
* Making codex configurable from the docker environment
* Sets up two networks with three codex nodes
* enables and exposes metrics endpoint for first node
* Manually performed two-client test scenario with docker containers
* Sets up docker-ignore and docker github workflow
* Wires up all codex CLI arguments to docker env vars
* Makes API_PORT variable optional as well
* Removes duplicate docker-login step
* Fixes path to docker file
* Switches target dockerhub for debugging
* Adds git tag info to --version output
* Exposes version information via debug endpoint
* Debugging docker image
* specifies target platforms for docker build
* specifies platform for QEMU and buildx steps
* Attempt to debug line endings
* Disables march-native in config.nims as test
* Applies make argument to disable architecture optimization during docker build
* Removes subset version tags from docker build
* Restore multi-arch build
* Removes docker-build test branch from CI branches
* [ci] Add tips for maintaining CI
Lessons learned from speeding up the CI in
https://github.com/status-im/nim-codex/pull/303
* [ci] Readme: add tip about timing of every test
As suggested by @Menduist
* [ci] Readme: add link to github actions usage limits
As suggested by @Menduist
* [ci] Extract setup of nimbus build system into separate file
* [ci] Cleanup NodeJS setup
* [ci] Use amd64 by default
* [ci] Separate steps for unit, contract and integration tests
* [ci] Separate build job for coverage that is allowed to fail
* [ci] Separate build job for Nim 1.2
* [ci] Calculate coverage on unit tests only
This enables faster development cycles at
the expense of code coverage accuracy.
* [PoR] Test proofs of retrievability with a small block size
To get a reasonable test execution time.
* [ci] Set NIM_COMMIT environment variable
To prevent subsequent `make` command to build a
different version of Nim.
* [ci] Checkout submodules recursively
So that nimbus-build-system doesn't have to
do it afterwards.
* [ci] Update caches on every run
Will automatically update caches when a new minor version
of Nim is released.
See also:
https://github.com/actions/cache/blob/main/workarounds.md#update-a-cache
* [ci] Set cache_nonce for all jobs, not just those in the matrix
* [build] update to latest nimbus-build-system
Requires an update to latest nim-nat-traversal
* [erasure] Test erasure coding with a small block size
To get a reasonable test execution time.
* [erasure] fix typo
* [PoR] Test PoR store with a small block size
To get a reasonable test execution time.
* [PoR] Test PoR network with a small block size
To get a reasonable test execution time.
* [ci] Ensure that unit tests are not dependent on Ethereum
Start Ethereum node *after* the unit tests are run.
* [ci] Cancel all other jobs when one fails
Allows for faster feedback loops; a next attempt to run
the CI will start sooner.
Main goal is to update the nim-codex CI workflow to use the
[`msys2/setup-msys2@v2`][setmsys2] GitHub Action, as used by the
[nimbus-eth2 workflow][ne2w] per changes made to it several months ago. The
`msys2/setup-msys2@v2` action has been used by other Status-org projects prior
to this commit, e.g. nim-leopard, nim-datastore, nim-status.
A fix is included for the failing macOS builds, related to
[actions/virtual-environments#5819][ave5819]. See [L151][L151].
All builds [succeed][succeed] (with build arch-targets verified as far as
possible via `ldd`, `otool`, `ntldd`), including `linux-i386` and
`windows-i386`, though the `i386` builds are presently disabled (commented
out). The `i386` builds can be enabled simply by uncommenting:
```
# - os: linux
# cpu: i386
...
# - os: windows
# cpu: i386
```
The resulting `.github/workflows/ci.yml` is a "remix" of the current workflows
for nimbus-eth2 and nim-codex (i.e. prior to this commit) along with techniques
learned from developing workflows for other Status-org repos. Some comments and
code-reorg help to clarify/explain what's done in the
`Derive environment variables` step.
`-d:limitStackUsage` has been adopted for `linux-amd64` builds from
[nimbus-eth2's workflow][ne2wL155] and [related code][ne2config] has been
copied into `config.nims`
`-d:limitStackUsage` can easily be dropped if it's not desirable for Codex.
Build targets use `-latest` for `runs-on`, i.e. `macos-latest`,
`ubuntu-latest`, `windows-latest`.
Through a combination of local testing and iterative pushes to GitHub, the
workflow's embedded Bash scripts have been revised to include only the
necessary steps for all builds to succeed, including `linux-i386` and
`windows-i386`.
The GitHub Actions workflow `.github/workflows/codecov.yml` has been removed,
while coverage data generation/upload steps have been added to
`.github/workflows/ci.yml` as the final steps conditional on
`if: runner.os == 'Linux' && matrix.target.cpu == 'amd64' && matrix.nim_branch == matrix.cov_branch`.
A redundant `--passC:'-m32 -mno-adx'` is used for `linux-i386` builds; the
redundant flags do not affect the build, but can be helpful when eyeballing
GitHub Actions builds with increased compile-time verbosity.
Some variable expansions used in `github/workflows/ci.yml` could result in
compilation failures if related paths include whitespace. It's not a problem
for this commit but could be a problem for a user copy-pasting from the
workflow; solving that problem is left as an exercise for the reader.
[setmsys2]: https://github.com/msys2/setup-msys2#readme
[ne2w]: https://github.com/status-im/nimbus-eth2/blob/stable/.github/workflows/ci.yml
[ave5819]: https://github.com/actions/virtual-environments/pull/5819
[L151]: https://github.com/status-im/nim-codex/blob/ci/msys2/.github/workflows/ci.yml#L151
[succeed]: https://github.com/status-im/nim-codex/actions/runs/2606854455
[ne2wL155]: https://github.com/status-im/nimbus-eth2/blob/stable/.github/workflows/ci.yml#L155-L159
[ne2config]: https://github.com/status-im/nimbus-eth2/blob/stable/config.nims#L43-L49
* [leopard] add github.com/status-im/nim-leopard to vendor
* [leopard] specify absolute path for nimcache dir
* [leopard] make adjustments to nim-dagger CI GHA workflow