`leon_macros::template!` can parse template at compile-time.
It accepts a utf-8 string literal and uses `leon` internally to parse it, then generate code that evaluates to `Template<'static>`.
- Exclude fuzz from crate leon when publishing
- Impl fn-like proc-macro `leon_macros::template!`
- Add dep `leon-macros` to binstalk
- Use `leon_macros::template!` in `binstalk::fetchers::gh_crate_meta::hosting`
- Add doc for `leon-macros` in `leon`
- Improve `std::fmt::Display` impl for `leon::ParseError`
- Fixed broken infra link in leon
Signed-off-by: Jiahao XU <Jiahao_XU@outlook.com>
Since it is run on PR anyway, we should also run it on main just in case
it fails, i.e. merging of PRs without rebasing against main to test out
latest changes.
It will now also be run on draft PR so that they can test out the
changes and find out bugs before making it ready to review.
This change will also increase cache hits on PR, thus speeding up the CI.
Signed-off-by: Jiahao XU <Jiahao_XU@outlook.com>
Avoid checking dev-deps for jobs `*-check` and lint in workflow `ci.yml`
We just want to make sure cargo-binstall can compile for the target, we
don't want to pull in the extra dependencies.
Signed-off-by: Jiahao XU <Jiahao_XU@outlook.com>
Speedup ci.yml: Do not run tests on x86_64-unknown-linux-musl
Since we already run test on x86_64-unknown-linux-musl in
release-build.yml and x86_64-unknown-linux-musl is almost identical to
x86_64-unknown-linux-gnu except for the libc, there's no need to run the
tests in ci.yml
Signed-off-by: Jiahao XU <Jiahao_XU@outlook.com>
Since release build enables a lot of optimization, disable debug assert
and possibly change the code to be run, it's better to run the tests
again.
Signed-off-by: Jiahao XU <Jiahao_XU@outlook.com>
Remove `mozilla-actions/sccache-action@v0.0.2` and instead use `taiki-ie/install-action` to install `sccache`, since we already use `taiki-e/install-action` for installing crates.
This PR also refactor just-setup.yml and use pass `GITHUB_TOKEN` to `taiki-e/install-action` which uses `cargo-binstall` for installing `cargo-auditable` and `sccache`.
Signed-off-by: Jiahao XU <Jiahao_XU@outlook.com>
since cache-cleanup will issue a lot of gh api requests, running the
workflow right after the PRs would cause the GH API to rate limit all
workflows (including our CI for testing and release) that they can no
longer upload artifacts and `cargo-binstall` would have to fallback to
sending GET requests instead of using GH API, which makes it a lot
slower and more likely to fail.
This PR changes it to be run at 3am and 4:30am AEST which nobody would submit
any PR at that time and then remove all caches of the top 20 closed prs.
The workflow can also now be triggered manually.
Signed-off-by: Jiahao XU <Jiahao_XU@outlook.com>
Previously it only removes 30 caches for the PR because gh actions-cache list defaults to only listing 30 cache entries.
In this PR, I changed the limit to the maximum allowed 100 cache entries and I also added a loop to keep getting the next 100 cache entries until there is none.
Signed-off-by: Jiahao XU <Jiahao_XU@outlook.com>
* leon: first implementation
* Update crates/leon/src/values.rs
Co-authored-by: Jiahao XU <Jiahao_XU@outlook.com>
* Workaround orphan rules to make API more intuitive
* Fmt
* Clippy
* Use CoW
* Use cow for items too
* Test that const construction works
* leon: Initial attempt at O(n) parser
* leon: finish parser (except escapes)
* leon: Improve ergonomics of compile-time templates
* Document helpers
* leon: Docs tweaks
* leon: Use macro to minimise parser tests
* leon: add escapes to parser
* leon: test escapes preceding keys
* leon: add multibyte tests
* leon: test escapes following keys
* Format
* Debug
* leon: Don't actually need to keep track of the key
* leon: Parse to vec first
* leon: there's actually no need for string cows
* leon: reorganise and redo macro now that there's no coww
* Well that was silly
* leon: Adjust text end when pushing
* leon: catch unbalanced keys
* Add error tests
* leon: Catch unfinished escape
* Comment out debugging
* leon: fuzz
* Clippy
* leon: Box parse error
* leon: &dyn instead of impl
* Can't impl FromStr, so rename to parse
* Add Vec<> to values
* leon: Add benches for ways to supply values
* leon: Add bench comparing to std and tt
* Fix fuzz
* Fmt
* Split ParseError and RenderError
* Make miette optional
* Remove RenderError lifetime
* Simplify ParseError type schema
* Write concrete Values types instead of generics
* Add license files
* Reduce criterion deps
* Make default a cow
* Add a CLI leon tool
* Fix tests
* Clippy
* Disable cli by default
* Avoid failing the build when cli is off
* Add to ci
* Update crates/leon/src/main.rs
Co-authored-by: Jiahao XU <Jiahao_XU@outlook.com>
* Update crates/leon/Cargo.toml
Co-authored-by: Jiahao XU <Jiahao_XU@outlook.com>
* Bump version
* Error not transparent
* Diagnostic can do forwarding
* Simplify error type
* Expand doc examples
* Generic Values for Hash and BTree maps
* One more borrowed
* Forward implementations
* More generics
* Add has_keys
* Lock stdout in leon tool
* No more debug comments in parser
* Even more generics
* Macros to reduce bench duplication
* Further simplify error
* Fix leon main
* Stable support
* Clippy
---------
Co-authored-by: Jiahao XU <Jiahao_XU@outlook.com>
to make the pre-built artifacts auditable by `cargo-audit` and other
tools.
* Add new env `JUST_USE_AUDITABLE` to enable use of `cargo-auditable`
Signed-off-by: Jiahao XU <Jiahao_XU@outlook.com>
- Remove `tools: cross` input to `actions/just-setup`
since we use `cargo-zigbuild` for cross compiling instead of `cross-rs`
now.
- Only install `cargo-zigbuild` in `just ci-install-deps` if `JUST_USE_CARGO_ZIGBUILD` is enabled
- Include hash of `rustc -vV` in `build-cache`
Switching between different versions of `rustc` will cause all crates to be
rebuilt using new `rustc`.
- Replace input `cache` with `index-cache` and `build-cache` in `actions/just-setup`
for better control of caching behavior
- Reuse workflow `test`'s `build-cache` in workflow `lint`
Signed-off-by: Jiahao XU <Jiahao_XU@outlook.com>
Fixed#776
- Add new feature gh-api-client to binstalk-downloader
- Impl new type `binstalk_downloader::remote::{RequestBuilder, Response}`
- Impl `binstalk_downloader::gh_api_client::GhApiClient`, exposed if `cfg(feature = "gh-api-client")` and add e2e and unit tests for it
- Use `binstalk_downloader::gh_api_client::GhApiClient` to speedup `cargo-binstall`
- Add new option `--github-token` to supply the token for GitHub restful API, or read from env variable `GITHUB_TOKEN` if not present.
Signed-off-by: Jiahao XU <Jiahao_XU@outlook.com>
* Run e2e-tests for release build
* Print `RUSTFLAGS` for justfile target build & check
* Fix CI: Disable miropt level 4
* Fix CI: Disable -Zbuild-std
* Disable `-Zgcc-ld=lld` and `-Zshare-generics` so that we can switch back to stable
Signed-off-by: Jiahao XU <Jiahao_XU@outlook.com>
Fixed#779#791
- Retry request on timeout
- Retry for `StatusCode::{REQUEST_TIMEOUT, GATEWAY_TIMEOUT}`
- Add `DEFAULT_RETRY_DURATION_FOR_RATE_LIMIT` for 503/429
if 503/429 does not give us a header or give us an invalid header on
when to retry, we would default to
`DEFAULT_RETRY_DURATION_FOR_RATE_LIMIT`.
- Fix `Client::get_redirected_final_url`: Retry using `GET` on status code 400..405 + 410
- Rename remote_exists => remote_gettable & support fallback to GET
if HEAD fails due to status code 400..405 + 410.
- Improve `Client::get_stream`: Include url & method in the err of the stream returned
Signed-off-by: Jiahao XU <Jiahao_XU@outlook.com>
* Refactor: Extract new crate binstalk-types
* Optimize: Rm field `CrateInfo::other`
which also removes dep serde-tuple-vec-map and serde-json from
binstalk-types.
This also makes `CrateInfo` easier to use, more generic and can be used
over any `Serializer`, not just `serde_json::Value`.
* Mark all errors in `binstalk-manifests` as non_exhaustive
* Reduce size of `CvsParseError` by using `Box<str>`
instead of `String` for variant `UnknownSourceType`.
* Reduce size of `CratesTomlParseError` to 16 bytes on 64bit platform
by boxing variants `TomlWrite` and `CvsParse` as these two fields are
significantly larger than other variants.
* Unify import style in mod `binstall_crates_v1`
* Replace dep binstalk-manifests with binstalk-types in binstalk-downloader
to reduce its transitive dependencies and enables binstalk-downloader to
be built in parallel to binstak-manifests.
* Replace dep binstalk-manifests with binstalk-types in binstalk
to reduce transitive dependencies and enables binstalk to be built in
parallel to binstalk-manifests.
This is benefitial because binstalk-manifests pulls in toml_edit, which
could takes up to 15s to be built on M1 (7-9s for codegen).
* Add dep binstalk-manifests to crates/bin
* Update dependabot and GHA release-pr
Signed-off-by: Jiahao XU <Jiahao_XU@outlook.com>
Fixed#136
* Impl opt-out optioins in binstalk
* Replace field `Options::{gh_crate, quickinstall}_fetcher` with `resolver`
which can determine order of resolver used.
* Add new field `Args::{disable_}strategies`
* Add new variant `BinstallError::InvalidStrategies`
* Add variant `BinstallError::NoFallbackToCargoInstall`
* Add code for supporting strategies in mod entry
* Test `--disable-strategies` in `tests.sh`
* Test for `--strategies` in `tests.sh`
Signed-off-by: Jiahao XU <Jiahao_XU@outlook.com>