Skip to content

Commit

Permalink
chore(docs): devcontainer docs (#4007)
Browse files Browse the repository at this point in the history
# Description

Replaces #3947

---------

Co-authored-by: José Pedro Sousa <github@zepedro.me>
Co-authored-by: Cat McGee <helloworld@mcgee.cat>
  • Loading branch information
3 people committed Jan 11, 2024
1 parent eea3ea1 commit 5ae9d2f
Show file tree
Hide file tree
Showing 5 changed files with 116 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,11 @@ The easiest way to use these tools is by installing the [Noir VS Code extension]

Some Noir repos have leveraged Codespaces in order to ease the development process. You can visit the [noir-starter](https://github.com/noir-lang/noir-starter) for an example.

<video width="100%" height="auto" controls>
<source src={require('@site/static/video/codespaces_showcase.mp4').default} type="video/mp4" />
Your browser does not support the video tag.
</video>

## GitHub Actions

You can use `noirup` with GitHub Actions for CI/CD and automated testing. It is as simple as
Expand Down
110 changes: 110 additions & 0 deletions docs/docs/how_to/using-devcontainers.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
---
title: Developer Containers and Codespaces
description: "Learn how to set up a devcontainer in your GitHub repository for a seamless coding experience with Codespaces. Follow our easy 8-step guide to create your own Noir environment without installing Nargo locally."
keywords: ["Devcontainer", "Codespaces", "GitHub", "Noir Environment", "Docker Image", "Development Environment", "Remote Coding", "GitHub Codespaces", "Noir Programming", "Nargo", "VSCode Extensions", "Noirup"]
sidebar_position: 1
---

Adding a developer container configuration file to your Noir project is one of the easiest way to unlock coding in browser.

## What's a devcontainer after all?

A [Developer Container](https://containers.dev/) (devcontainer for short) is a Docker image that comes preloaded with tools, extensions, and other tools you need to quickly get started or continue a project, without having to install Nargo locally. Think of it as a development environment in a box.

There are many advantages to this:

- It's platform and architecture agnostic
- You don't need to have an IDE installed, or Nargo, or use a terminal at all
- It's safer for using on a public machine or public network

One of the best ways of using devcontainers is... not using your machine at all, for maximum control, performance, and ease of use.
Enter Codespaces.

## Codespaces

If a devcontainer is just a Docker image, then what stops you from provisioning a `p3dn.24xlarge` AWS EC2 instance with 92 vCPUs and 768 GiB RAM and using it to prove your 10-gate SNARK proof?

Nothing! Except perhaps the 30-40$ per hour it will cost you.

The problem is that provisioning takes time, and I bet you don't want to see the AWS console every time you want to code something real quick.

Fortunately, there's an easy and free way to get a decent remote machine ready and loaded in less than 2 minutes: Codespaces. [Codespaces is a Github feature](https://github.com/features/codespaces) that allows you to code in a remote machine by using devcontainers, and it's pretty cool:

- You can start coding Noir in less than a minute
- It uses the resources of a remote machine, so you can code on your grandma's phone if needed be
- It makes it easy to share work with your frens
- It's fully reusable, you can stop and restart whenever you need to

:::info

Don't take out your wallet just yet. Free GitHub accounts get about [15-60 hours of coding](https://github.com/features/codespaces) for free per month, depending on the size of your provisioned machine.

:::

## Tell me it's _actually_ easy

It is!

Github comes with a default codespace and you can use it to code your own devcontainer. That's exactly what we will be doing in this guide.

<video width="100%" height="auto" controls>
<source src={require('@site/static/video/how-tos/devcontainer.mp4').default} type="video/mp4" />
Your browser does not support the video tag.
</video>

8 simple steps:

#### 1. <a href="https://github.com/new" target="_blank">Create a new repository</a> on GitHub.

#### 2. Click "Start coding with Codespaces". This will use the default image.

#### 3. Create a folder called `.devcontainer` in the root of your repository.

#### 4. Create a Dockerfile in that folder, and paste the following code:

```docker
FROM --platform=linux/amd64 node:lts-bookworm-slim
SHELL ["/bin/bash", "-c"]
RUN apt update && apt install -y curl bash git tar gzip libc++-dev
RUN curl -L https://raw.githubusercontent.com/noir-lang/noirup/main/install | bash
ENV PATH="/root/.nargo/bin:$PATH"
RUN noirup
ENTRYPOINT ["nargo"]
```
#### 5. Create a file called `devcontainer.json` in the same folder, and paste the following code:

```json
{
"name": "Noir on Codespaces",
"build": {
"context": ".",
"dockerfile": "Dockerfile"
},
"customizations": {
"vscode": {
"extensions": ["noir-lang.vscode-noir"]
}
}
}
```
#### 6. Commit and push your changes

This will pull the new image and build it, so it could take a minute or so

#### 8. Done!
Just wait for the build to finish, and there's your easy Noir environment.


Refer to [noir-starter](https://github.com/noir-lang/noir-starter/) as an example of how devcontainers can be used together with codespaces.



## How do I use it?

Using the codespace is obviously much easier than setting it up.
Just navigate to your repository and click "Code" -> "Open with Codespaces". It should take a few seconds to load, and you're ready to go.

:::info

If you really like the experience, you can add a badge to your readme, links to existing codespaces, and more.
Check out the [official docs](https://docs.github.com/en/codespaces/setting-up-your-project-for-codespaces/setting-up-your-repository/facilitating-quick-creation-and-resumption-of-codespaces) for more info.
2 changes: 1 addition & 1 deletion docs/docusaurus.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ export default {
prism: {
theme: lightTheme,
darkTheme: darkTheme,
additionalLanguages: ['rust', 'powershell', 'solidity', 'toml'],
additionalLanguages: ['rust', 'powershell', 'solidity', 'toml', 'json', 'bash', 'docker'],
},
stylesheets: [
{
Expand Down
Binary file added docs/static/video/codespaces_showcase.mp4
Binary file not shown.
Binary file added docs/static/video/how-tos/devcontainer.mp4
Binary file not shown.

0 comments on commit 5ae9d2f

Please sign in to comment.