(dev)=
# Development

(devenv)=
## Tools and environment

This repository makes use of a number of tools. At a minimum, you'll want to
install the following on your machine:

- [Go](https://go.dev/dl/), for building and running the code in this
  repository, including the Go SDK.
- [NodeJS](https://nodejs.org/en/download/), for working with the NodeJS SDK.
- [Python](https://www.python.org/downloads/), for working with the Python SDK.
- [.NET](https://dotnet.microsoft.com/download), for working with the .Net SDK.
- [Golangci-lint](https://github.com/golangci/golangci-lint), for linting Go
  code.
- [gofumpt](https://github.com/mvdan/gofumpt) for formatting Go code. See
  [installation](https://github.com/mvdan/gofumpt#installation) for editor setup
  instructions.
- [Yarn](https://yarnpkg.com/), for building and working with the NodeJS SDK.
- [Pulumictl](https://github.com/pulumi/pulumictl)
- [jq](https://stedolan.github.io/jq/)

For consistency and ease of use, this repository provides a
[](gh-file:pulumi#.mise.toml) file for configuring [Mise](https://mise.jdx.dev),
a tool for managing development environments (similar in nature to `direnv` or
`asdf`). To use it, you only need to install Mise and activate the environment,
which you can do as follows:

1. [Install
   Mise](https://mise.jdx.dev/getting-started.html#installing-mise-cli).
2. Configure your shell to [activate
   Mise](https://mise.jdx.dev/getting-started.html#activate-mise). This is
   typically accomplished by adding an appropriate invocation of `mise activate`
   to your shell's configuration file (e.g. `.bashrc`, `.zshrc`, etc.).
3. Restart your shell session so that your configuration changes take effect.
4. `cd` into the root of this repository. Run `mise trust` to allow the
   repository to specify the required tools, all of which are listed in the
   top-level `.mise.toml` file. After this, you should find that the tools you
   need are now available in your `$PATH`.
5. Run `mise settings experimental=true` or use the `MISE_EXPERIMENTAL` environment variable. 
   This is currently required to enable the [Go backend](https://mise.jdx.dev/dev-tools/backends/go.html#go-backend).
6. Run `mise install` to ensure all tools are up to date. You may need to re-run
   this if the tool list changes.

Use of Mise is currently experimental and optional.
