Commit Graph

216 Commits

Author SHA1 Message Date
KtorZ 6c039708c3
Rework 'watch_project' to reuse 'with_project'
Also removed the 'clear' flag to do it by default instead of clogging
  the terminal view.

  This now works pretty nicely, and the logic is back under
  `aiken_project`.
2023-11-25 14:48:22 +01:00
KtorZ 777d30b8ac
Rework 'with_project' to avoid early process exit. 2023-11-25 13:26:24 +01:00
Pi Lanningham d04094560b
Add an example usage in the check command
Feel free to do this differently, I just implemented it because i'm actually using it heh
2023-11-24 08:37:54 +01:00
Pi Lanningham 5068da3a17
Refactor into cargo-project
Rather than have this logic in the aiken binary, this provides a generic
mechanism to do "something" on file change events.  KtorZ is going to
handle wiring it up to the CLI in the best way for the project.

I tried to write some tests for this, but it's hard to isolate the
watcher logic without wrestling with the borrow checker, or overly
neutering this utility.
2023-11-24 08:37:54 +01:00
Pi Lanningham 771f6d1601
Formatting and check 2023-11-24 08:37:54 +01:00
Pi Lanningham 689a41ded4
Implement a basic watch command
This adds the following command
```
aiken watch
```

There are some open questions to answer, though:
- I really like the ergonomics of `aiken watch`; but it also makes sense
  as a flag to `aiken check` or `aiken build` etc.; should we just
  support the flag, the command, or both?
- Right now I duplicated the with_project method, because it forces
  process::exit(1); Should we refactor this, and if so, how?
- Are there other configuration options we want?
2023-11-24 08:37:53 +01:00
microproofs 49bd4ba33d chore: Release 2023-10-25 19:00:03 -04:00
KtorZ a524836c94
Add compiler version & system information to panic error message
So that we stop constantly asking people about it.
2023-10-06 14:46:11 +02:00
KtorZ d56d5180cf
Move compile-time build info to aiken-project
So that we can use it as part of the blueprints.
2023-10-06 14:08:47 +02:00
microproofs fb6cbbec8b chore: Release 2023-09-29 22:08:09 -04:00
microproofs 82ceb5b696 chore: Release 2023-09-29 19:39:28 -04:00
waalge dbd4fe2aab fix rust version 2023-09-28 13:30:34 -04:00
waalge 37ec2b121b rev 2023-09-28 13:30:34 -04:00
waalge 3c11c95e01 insert into rust 2023-09-28 13:30:34 -04:00
KtorZ ee4001d2c8
chore: Release 2023-09-20 18:03:46 +02:00
rvcas 1dea348a2e
chore: rust rover error 2023-09-13 21:29:05 -04:00
KtorZ 5381762e50 Rework logs around dependency fetching. 2023-09-13 17:17:32 -04:00
rvcas 1de7b2866a
feat(cli): add --deny to build, check, and docs
This is useful for CI, where people that may have
a stricter workflow want to force CI to fail if any warnings
are detected.
2023-09-06 17:19:44 -04:00
rvcas dfe433ea46
fix: trim whitespace when loading hex strings from files closes #720 2023-08-31 18:22:09 -04:00
rvcas b075d85b40
chore: Release 2023-08-24 15:05:12 -06:00
rvcas a7062ccb88
chore: fix versions 2023-08-24 15:04:19 -06:00
rvcas 747e057d05
fix: tags 2023-08-24 15:00:09 -06:00
KtorZ 379368c530
Fix clippy. 2023-08-22 13:30:30 +02:00
KtorZ 2f0211a7b1
Bump all version manually because cargo workspaces didn't work. 2023-08-22 13:27:10 +02:00
KtorZ 780a61e3e8
Release 1.0.16-alpha
aiken@1.0.16-alpha

Generated by cargo-workspaces
2023-08-22 13:18:48 +02:00
KtorZ 7883aff5f7
revert 619b73d03e
There's really no scenario where we want to generate boilerplate that
  always end up being removed. In particular, the boilerplate breaks
  tutorial as it generate conflicting validators in the blueprint.

  The only argument in favor of the boilerplate is to serve as example
  and show people some syntax reminder. However, this is better done in
  the README or on the user manual directly.
2023-08-22 12:59:36 +02:00
microproofs 89c55a23fa chore: Release 2023-08-19 20:17:00 -04:00
KtorZ 139226cdab Support interactive blueprint parameter application. 2023-08-19 13:39:39 -04:00
rvcas 690e41261e
chore: Release 2023-08-16 23:30:21 -04:00
rvcas 2600937447
chore: cargo fmt 2023-08-16 22:56:22 -04:00
logicalmechanism 050c41c8dc tx simulate returns a vector of exbudgets now 2023-08-16 22:37:00 -04:00
microproofs 55887d3a45 fix: decode should always print to textual 2023-08-01 00:47:29 -04:00
Cainã Costa 49cc76cf77 chore: cargo fmt 2023-07-25 14:00:29 -04:00
Cainã Costa 2cecb099d7 feat: add a generator for shell completions 2023-07-25 14:00:29 -04:00
rvcas 152e847e26
chore: no longer need this env var 2023-07-24 10:30:02 -04:00
Cainã Costa d19a39239d fix: fix clippy error 2023-07-24 10:24:37 -04:00
Pi Lanningham 27c0f25606 Add a blueprint hash command
Similar to blueprint address and blueprint policy, this just prints the
hash of the validator; useful if you need the hash, and you don't want
to pipe the address to a bech32 decoder and juggle the hex.
2023-07-21 22:57:31 -04:00
rvcas 97acd6d7bd
chore: Release 2023-07-15 21:37:10 -04:00
rvcas 621017bd93
chore: Release 2023-07-14 10:55:13 -04:00
rvcas a36cc7d631
fix: cpu and mem in white terminals, cyan makes things stand out nicely closes #415 2023-07-11 18:50:27 -04:00
Pi Lanningham c10f0e53df cargo fmt 2023-07-01 16:17:10 -04:00
Pi Lanningham 4a8cb72708 Add a blueprint policy command
Computes the policy ID of a minting policy; added guards for blueprint address to check that it's not a minting policy; Wasn't 100% sure where the errors should live, so I'm happy to move them if there's objections
2023-07-01 16:17:10 -04:00
rvcas 90ff211205
chore: Release 2023-06-23 19:41:14 -04:00
rvcas 619b73d03e
feat: enhance new command 2023-06-23 19:40:11 -04:00
rvcas 85d82e5aec
chore: Release 2023-06-13 21:24:41 -04:00
rvcas 06079fa57e
fix: wow 2023-06-13 21:03:16 -04:00
microproofs 379c2fe2bf chore: Release 2023-06-13 20:32:22 -04:00
rvcas 878fd4de48 feat: include column number in location 2023-06-13 20:30:43 -04:00
rvcas 44e066f907 feat: add a panic hook, present issue link 2023-06-13 20:30:43 -04:00
microproofs c5af6e0be3 chore: Release 2023-06-08 19:34:51 -04:00
rvcas 41a08e4a06
chore: re-add nix stuff from @waalge
Co-authored-by: waalge
2023-06-07 17:16:56 -04:00
Pi Lanningham fbec4a9385 Update docs.rs
The doc comment was long, leading to an incorrect description on the command line
2023-06-02 02:25:04 -04:00
rvcas cb9a140601
chore: Release 2023-06-02 00:34:07 -04:00
rvcas 335cc0c8bc
feat(cli): rework uplc subcommands
closes #553

* rename flat to encode
* rename unflat to decode
* alias both to their old names
* both only print to stdout
  use can pipe to file
* split cbor and hex flags
* hex flag works for either cbor or flat
* encode takes --to flag
  [name, named-debruijn, debruijn]
* decode takes --from flag
  [name, named-debruijn, debruijn]
2023-06-01 23:50:59 -04:00
Micah Kendall ccb2d0b7ee urgent nix patch 2023-05-19 18:28:07 -04:00
rvcas d68d4656df
feat(aiken-new): output a github action
- bonus: include git short sha in version

closes #515
2023-05-18 01:33:03 -04:00
microproofs 8e60234562 chore: Release 2023-05-17 18:04:45 -04:00
rvcas f2d8c8938c
chore: Release 2023-05-14 21:25:29 -04:00
rvcas e1a75391a1
chore: Release 2023-05-09 23:16:59 -04:00
microproofs b1728b57b8 chore: Release 2023-04-28 17:11:56 -04:00
KtorZ 4269cf20b0
Fix erroneous "aiken new" command's output instructions
Fixes #505.
2023-04-20 14:38:48 +02:00
rvcas 3182dac908
chore: Release 2023-04-17 10:53:30 -04:00
rvcas 3d0fa1a5f6
chore: Release 2023-04-16 16:49:08 -04:00
rvcas 63ddef7efb
chore: Release 2023-04-13 13:37:12 -04:00
rvcas 12e8ebdf4f
chore: revert version bumps 2023-04-13 13:03:43 -04:00
KtorZ 067e39286d
Bump versions to 1.0.0-alpha, update CHANGELOG. 2023-04-13 17:35:21 +02:00
KtorZ 00550f8ddb
Add myself as co-authors for some of the project's crate
Forgot to do it before, and noticing now :D
2023-04-13 17:25:21 +02:00
KtorZ e2c78bdd3b
Add min rust-version to crates
So that people runs into better errors if they try installing from source with an 'obsolete' rust compiler.
2023-04-13 17:24:44 +02:00
KtorZ 74a7257ec9
Add some more instructions to 'blueprint apply' command help text. 2023-04-13 12:23:20 +02:00
KtorZ 4799af3242
Rework 'blueprint apply' command and wrap up wiring up validation.
The apply command now works only from a serialized CBOR data (instead of a UPLC syntax). So it is no longer possible to specify arbitrary cbor terms through the CLI. I believe it to be an acceptable limitation for now; especially given that Aiken will never generate blueprints with non-data terms at the interface boundary.
2023-04-08 08:57:40 +02:00
KtorZ cdc7ebf9a0
Remove now-unnecessary blueprint generics.
These were needed before as a way to _partially deserialize_
  blueprints. Indeed, some commands required accessing information of
  the blueprint, but not necessarily the schema. So out of laziness (or
  cleverness?), we only deserialized validators as serde::Value and
  achieved that through the use of generics.

  Now that validators and schemas have proper deserialisers, we can
  simply deserialize a blueprint.

  TODO: Our serialisation/deserialisation is safe with regards to
  itself; i.e. it roundtrips. However, we only supports a subset of the
  specified blueprint format. For example, we would fail to deserialize
  blueprints that have inline data-schemas (we only use references).
2023-04-08 08:53:51 +02:00
KtorZ 6422027c6c
Fix README template for newly generated projects, and hello, world 2023-03-18 22:23:55 +01:00
KtorZ 451737237e Fix blueprint generation for recursive types.
This was a bit tricky and I ended up breaking things down a lot and
  trying different path. This commit is the result of the most
  satisfying one.

  It introduces a new 'concept' and types: Definitions and Reference.
  These elements are meant to reflect JSON pointers and JSON-schema
  definitions which we now use for pretty much all user-defined
  data-types.

  In fact, Schemas are no longer inlined, but are always referencing
  some schema under "definitions".

  This indirection is necessary in order to cope with recursive types.
  And while it's only truly necessary for recursive types, using it
  consistently makes it both easier to produce and easier to consume.

  ---

  The blueprint generation for recursive types here also works thanks to
  the 'Definitions' data-structure wrapper around a BTreeMap. This uses
  a strategy where:

  (1) schemas are only generated if they haven't been seen before
  (2) schemas are marked as seen BEFORE actually being generated (to
  effectively stop a recursive generation).

  This relies on one important aspect: the key must be uniquely
  identifying a given schema. Which means that we have to monomorphize
  data-types with generic parameters also here, and use keys that are
  specialized in one data-type.

  ---

  In this large overhaul we've also lost one thing which I didn't bother
  re-introducing yet to keep the work manageable: title for record
  fields. Before, we use to pull those from record constructor when
  available, yet now, every record constructor has been replaced by a
  `$ref`. We could theoritically attach a title to the reference. I'll
  try to quickly add that in a later commit.
2023-03-12 12:44:49 -04:00
rvcas f8545854fc
feat: json output for uplc eval 2023-03-08 10:19:36 +01:00
KtorZ cb11b21c9f
Update dependencies
In particular, tempfile >= 3.4.0 to remove the vulnerability on remove_dir_all
2023-03-08 10:17:22 +01:00
rvcas c3175e2fc9
fix: some breaking changes from clap v4 2023-03-06 13:16:33 -05:00
rvcas 1902a2d56c
chore: update all deps 2023-03-06 13:13:59 -05:00
rvcas 1f8535e76e
chore: update some deps 2023-03-06 11:09:44 -05:00
rvcas 9f587e802c chore: update comment 2023-03-03 20:57:20 -05:00
rvcas e2dc4ec6c8 feat: implement convert command 2023-03-03 20:57:20 -05:00
rvcas 812ffb30f0 feat(cli): wire together a new command for convert 2023-03-03 20:57:20 -05:00
KtorZ a46a9fca41
Only use colors & text decorations on ANSI-capable terminals.
Fixes #404.
2023-02-26 13:19:03 +01:00
rvcas 0066cc61cc
Release 0.0.29
aiken@0.0.29
aiken-lang@0.0.29
aiken-lsp@0.0.29
aiken-project@0.0.29
uplc@0.0.29

Generated by cargo-workspaces
2023-02-23 19:04:18 -05:00
rvcas e611d1ee7a
chore(cmd::new): update validator definition in generated readme 2023-02-20 15:51:12 -05:00
rvcas b55726c90f feat(project): remove Error::List and use Vec<Error> 2023-02-20 15:30:25 -05:00
KtorZ 45454ced01 Make tracing configurable, when relevant.
Tracing is now turn OFF by default when:

  - building project
  - building documentation
  - building dependencies

  It can be turned ON only when building project using `--keep-traces`.
  That means it's not possible to build dependencies with traces. The
  address `--rebuild` flag will also rebuild without traces.

  Tracing is however turn ON by default when:

  - checking the project (and running tests).

  In this scenario, tracing can be disabled using `--no-traces` (if for
  example, one want to analyze the execution units of specific functions
  without having to manually remove traces from code).
2023-02-16 20:29:41 -05:00
KtorZ 3204322da6
Fix validator lookup by title.
We want the lookup to yield a result when there's only a single
  validator; and no title is provided. So that users can simply do
  'aiken address' in their project if it's unambiguous. The validator's
  name is only required to disambiguate between multiple validators.

  I also noticed that the order of arguments in with_validator was
  wrong. Somehow.
2023-02-16 10:28:27 +01:00
rvcas a311531508 fix(cli): aiken address 2023-02-16 00:05:55 -05:00
KtorZ 014c7a3d73
Fix error display in tx simulate. 2023-02-15 09:42:46 +01:00
KtorZ 428b5f2b37
Align output of `tx simulate` with other Aiken's commands.
And also return a structured output as JSON, so it's more easily used
  by other tools.

  ```
       Parsing script context
    Simulating 78ec148ea647cf9969446891af31939c5d57b275a2455706782c6183ef0b62f1
      Redeemer Spend → 0

  {"mem":151993,"cpu":58180696}
  ```
2023-02-14 16:50:55 +01:00
KtorZ 4aa92a6d5e
Use positional argument for blueprint 'apply' command 2023-02-07 11:42:42 +01:00
KtorZ 9b8ff590b8
Implement 'blueprint apply' command.
This is still a bit clunky as the interface is expecting parameters in UPLC form and we don't do any kind of verification. So it is easy to shoot oneself in the foot at the moment (for example, to apply an integer into something that should have received a data). To be improved later.
2023-02-04 11:39:55 +01:00
rvcas a365649360 chore: clippy autofix 2023-02-01 18:53:11 -05:00
KtorZ daee8e39d6
Implement new command: address
This calculates a validator's address from validators found in a blueprint. It also provides a convenient way to attach a delegation part to the validator if needs be. The command is meant to provide a nice user experience and works 'out of the box' for projects that have only a single validator. Just call 'aiken address' to get the validator's address.

  Note that the command-line doesn't provide any option to configure the target network. This automatically assumes testnet, and will until we deem the project ready for mainnet. Those brave enough to run an Aiken's program on mainnet will find a way anyway.
2023-01-31 15:39:40 +01:00
KtorZ f8970ecb9e
Move UPLC dump into separate function + log event.
```
    Compiling aiken-lang/stdlib 43d8e740ffdf5febc59e51b7f0d5f8506115340c (examples/hello_world/build/packages/aiken-lang-stdlib)
    Compiling aiken-lang/hello_world 1.0.0 (examples/hello_world)
   Generating project's blueprint (examples/hello_world/plutus.json)
    Exporting UPLC (examples/hello_world/artifacts)
  ```
2023-01-31 09:48:44 +01:00
KtorZ 5683d19a4c
Refactor build steps to generate blueprints instead
The blueprint is generated at the root of the repository and is
  intended to be versioned with the rest. It acts as a business card
  that contains many practical information. There's a variety of tools
  we can then build on top of open-source contracts. And, quite
  importantly, the blueprint is language-agnostic; it isn't specific to
  Aiken. So it is really meant as an interop format within the
  ecosystem.
2023-01-31 09:48:38 +01:00
KtorZ c440026e36
Fix generated projects' README + rename 'certify' -> 'publish'
This hints to how this particular purpose is about publishing
  certificate (either delegation or key de-registration).
2023-01-18 16:48:42 +01:00
rvcas 38734361d0 feat: make part of summary red if errors exist 2023-01-16 15:17:39 -05:00
KtorZ d2c03b0094
Remove restriction on the project's package name
There are restrictions regarding how modules are called, but given that packages are tight to repositories anyway; there's no way someone can publish and use an aiken package on 'aiken-lang' without being part of the organization. So the restriction on the command-line is pointless. Plus, it prevents us from using 'aiken-lang' as a placeholder name for tutorials.
2023-01-14 23:47:57 +01:00
KtorZ 219e81cb75
Add 'packages upgrade' command. 2023-01-14 23:29:28 +01:00
KtorZ 6286132a3e
Rename sub-command 'deps' → 'packages'
Slightly more readable and self-explanatory.
2023-01-14 23:29:28 +01:00
KtorZ 38df9a586e
Add new 'deps add' command
This makes it easier to add new dependencies, without having to
  manually edit the `aiken.toml` file.

  The command is accessible via two different paths:

  - aiken deps add

  or simply

  - aiken add

  for this is quite common to find at the top-level of the command-line,
  and, we still want to keep commands for managing dependencies grouped
  under a command sub-group and not all at the top-level. So we're
  merely promoting that one for visibility.
2023-01-14 23:29:28 +01:00
KtorZ d4f905b1db
Also move some associated methods to the 'Config' module
And refactor the 'new' command implementation.
2023-01-14 23:29:28 +01:00
KtorZ 0771ab24bd
Move 'PackageName' and associated methods in its own module.
This is a bit cleaner, as the 'cmd/new' had many on-the-fly functions
  which are better scoped inside this module.

  Plus, it plays nicely with the std::str::FromStr trait definition.
2023-01-14 23:29:28 +01:00
KtorZ db22395764 Add new command group 'deps' and 'clear-cache' command.
This allows in case of issues with dependencies to at least safely
  remove cached packages. Before that, it could be hard to know where
  are even located the cached files without looking at the source code.

  ```
     Clearing /Users/ktorz/Library/Caches/aiken/packages
     Removing aiken-lang-stdlib-7ca9e659688ea88e1cfdc439b6c20c4c7fae9985.zip
     Removing aiken-lang-stdlib-main@04eb45df3c77f6611bbdff842a0e311be2c56390f0fa01f020d69c93ff567fe5.zip
     Removing aiken-lang-stdlib-6b482fa00ec37fe936c93155e8c670f32288a686.zip
     Removing aiken-lang-stdlib-1cedbe85b7c7e9c4036d63d45cad4ced27b0d50b.zip
         Done
  ```
2023-01-14 11:51:18 -05:00
rvcas 99ec0ff6b0
feat(check): change some logic around and add --exact-match 2023-01-10 11:46:44 -05:00
rvcas 9002ea263f
feat(check): make match tests flag fancier 2023-01-10 10:19:13 -05:00
rvcas d649b34ec3
Release 0.0.28
aiken@0.0.28
aiken-lang@0.0.28
aiken-lsp@0.0.28
aiken-project@0.0.28
uplc@0.0.28

Generated by cargo-workspaces
2023-01-06 13:41:00 -05:00
rvcas c89802eaed chore: bump pallas version 2023-01-06 13:39:18 -05:00
rvcas ee678f2978
Release 0.0.27
aiken@0.0.27
aiken-lang@0.0.27
aiken-lsp@0.0.27
aiken-project@0.0.27
flat-rs@0.0.27
uplc@0.0.27

Generated by cargo-workspaces
2022-12-30 00:57:49 -05:00
KtorZ ad5a393c4d
Add 'docs' and 'assets' to generated gitignore
And also make 'docs' the default folder (instead of doc) to be more aligned with Github's defaults.
2022-12-29 10:54:46 +01:00
rvcas 22103739c3 chore: some clippy warnings 2022-12-23 15:52:44 -05:00
KtorZ 39f5d1a86d
Make build, check and docs target directory an (optional) argument
Instead of being an option. Feels more natural that way.
2022-12-23 20:23:27 +01:00
KtorZ b1b57406e7
Do not generate placeholder files when creating new projects.
And fix the --lib flag to be a flag.
2022-12-23 20:19:28 +01:00
rvcas c723f4f796 feat: redo the new command 2022-12-22 10:52:49 -05:00
rvcas 42204d2d71 chore: make folder names match crate name 2022-12-21 18:11:07 -05:00