Skip to content

Commit 38fb88e

Browse files
committed
Update documentation.
1 parent 8006cf6 commit 38fb88e

File tree

5 files changed

+32
-175
lines changed

5 files changed

+32
-175
lines changed

LICENSE

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
MIT License
22

3-
Copyright (c) 2022 Microsoft Corporation
3+
Copyright (c) 2022 Cody Taylor
44

55
Permission is hereby granted, free of charge, to any person obtaining a copy
66
of this software and associated documentation files (the "Software"), to deal

README.md

Lines changed: 12 additions & 173 deletions
Original file line numberDiff line numberDiff line change
@@ -1,184 +1,23 @@
1-
# Dev Container Features: Self Authoring Template
1+
# Dev Container Features: CodeMan99
22

3-
> This repo provides a starting point and example for creating your own custom [dev container Features](https://containers.dev/implementors/features/), hosted for free on GitHub Container Registry. The example in this repository follows the [dev container Feature distribution specification](https://containers.dev/implementors/features-distribution/).
4-
>
5-
> To provide feedback to the specification, please leave a comment [on spec issue #70](https://github.com/devcontainers/spec/issues/70). For more broad feedback regarding dev container Features, please see [spec issue #61](https://github.com/devcontainers/spec/issues/61).
3+
Provides reusable tools for as devcontainer features.
64

7-
## Example Contents
5+
## CircleCI CLI
86

9-
This repository contains a _collection_ of two Features - `hello` and `color`. These Features serve as simple feature implementations. Each sub-section below shows a sample `devcontainer.json` alongside example usage of the Feature.
7+
Provides the `circleci` command at the shell. Using this tool requires authentication.
108

11-
### `hello`
12-
13-
Running `hello` inside the built container will print the greeting provided to it via its `greeting` option.
14-
15-
```jsonc
16-
{
17-
"image": "mcr.microsoft.com/devcontainers/base:ubuntu",
18-
"features": {
19-
"ghcr.io/devcontainers/feature-starter/hello:1": {
20-
"greeting": "Hello"
21-
}
22-
}
23-
}
24-
```
25-
26-
```bash
27-
$ hello
28-
29-
Hello, user.
30-
```
31-
32-
### `color`
33-
34-
Running `color` inside the built container will print your favorite color to standard out.
35-
36-
```jsonc
37-
{
38-
"image": "mcr.microsoft.com/devcontainers/base:ubuntu",
39-
"features": {
40-
"ghcr.io/devcontainers/feature-starter/color:1": {
41-
"favorite": "green"
42-
}
43-
}
44-
}
45-
```
46-
47-
```bash
48-
$ color
49-
50-
my favorite color is green
51-
```
52-
53-
## Repo and Feature Structure
54-
55-
Similar to the [`devcontainers/features`](https://github.com/devcontainers/features) repo, this repository has a `src` folder. Each Feature has its own sub-folder, containing at least a `devcontainer-feature.json` and an entrypoint script `install.sh`.
56-
57-
```
58-
├── src
59-
│ ├── hello
60-
│ │ ├── devcontainer-feature.json
61-
│ │ └── install.sh
62-
│ ├── color
63-
│ │ ├── devcontainer-feature.json
64-
│ │ └── install.sh
65-
| ├── ...
66-
│ │ ├── devcontainer-feature.json
67-
│ │ └── install.sh
68-
...
9+
```shell
10+
circleci setup
6911
```
7012

71-
An [implementing tool](https://containers.dev/supporting#tools) will composite [the documented dev container properties](https://containers.dev/implementors/features/#devcontainer-feature-json-properties) from the feature's `devcontainer-feature.json` file, and execute in the `install.sh` entrypoint script in the container during build time. Implementing tools are also free to process attributes under the `customizations` property as desired.
13+
Please visit CircleCI's [local pipeline development](https://circleci.com/blog/local-pipeline-development/) blog post for further usage information.
7214

73-
### Options
15+
## Exercism CLI
7416

75-
All available options for a Feature should be declared in the `devcontainer-feature.json`. The syntax for the `options` property can be found in the [devcontainer Feature json properties reference](https://containers.dev/implementors/features/#devcontainer-feature-json-properties).
17+
Provides the `exercism` command at the shell. Using this tool requires authentication.
7618

77-
For example, the `color` feature provides an enum of three possible options (`red`, `gold`, `green`). If no option is provided in a user's `devcontainer.json`, the value is set to "red".
78-
79-
```jsonc
80-
{
81-
// ...
82-
"options": {
83-
"favorite": {
84-
"type": "string",
85-
"enum": [
86-
"red",
87-
"gold",
88-
"green"
89-
],
90-
"default": "red",
91-
"description": "Choose your favorite color."
92-
}
93-
}
94-
}
19+
```shell
20+
exercism configure --token=[TOKEN]
9521
```
9622

97-
Options are exported as Feature-scoped environment variables. The option name is captialized and sanitized according to [option resolution](https://containers.dev/implementors/features/#option-resolution).
98-
99-
```bash
100-
#!/bin/bash
101-
102-
echo "Activating feature 'color'"
103-
echo "The provided favorite color is: ${FAVORITE}"
104-
105-
...
106-
```
107-
108-
## Distributing Features
109-
110-
### Versioning
111-
112-
Features are individually versioned by the `version` attribute in a Feature's `devcontainer-feature.json`. Features are versioned according to the semver specification. More details can be found in [the dev container Feature specification](https://containers.dev/implementors/features/#versioning).
113-
114-
### Publishing
115-
116-
> NOTE: The Distribution spec can be [found here](https://containers.dev/implementors/features-distribution/).
117-
>
118-
> While any registry [implementing the OCI Distribution spec](https://github.com/opencontainers/distribution-spec) can be used, this template will leverage GHCR (GitHub Container Registry) as the backing registry.
119-
120-
Features are meant to be easily sharable units of dev container configuration and installation code.
121-
122-
This repo contains a GitHub Action [workflow](.github/workflows/release.yaml) that will publish each feature to GHCR. By default, each Feature will be prefixed with the `<owner/<repo>` namespace. For example, the two Features in this repository can be referenced in a `devcontainer.json` with:
123-
124-
```
125-
ghcr.io/devcontainers/feature-starter/color:1
126-
ghcr.io/devcontainers/feature-starter/hello:1
127-
```
128-
129-
The provided GitHub Action will also publish a third "metadata" package with just the namespace, eg: `ghcr.io/devcontainers/feature-starter`. This contains information useful for tools aiding in Feature discovery.
130-
131-
'`devcontainers/feature-starter`' is known as the feature collection namespace.
132-
133-
### Marking Feature Public
134-
135-
Note that by default, GHCR packages are marked as `private`. To stay within the free tier, Features need to be marked as `public`.
136-
137-
This can be done by navigating to the Feature's "package settings" page in GHCR, and setting the visibility to 'public`. The URL may look something like:
138-
139-
```
140-
https://github.com/users/<owner>/packages/container/<repo>%2F<featureName>/settings
141-
```
142-
143-
<img width="669" alt="image" src="https://user-images.githubusercontent.com/23246594/185244705-232cf86a-bd05-43cb-9c25-07b45b3f4b04.png">
144-
145-
### Adding Features to the Index
146-
147-
If you'd like your Features to appear in our [public index](https://containers.dev/features) so that other community members can find them, you can do the following:
148-
149-
* Go to [github.com/devcontainers/devcontainers.github.io](https://github.com/devcontainers/devcontainers.github.io)
150-
* This is the GitHub repo backing the [containers.dev](https://containers.dev/) spec site
151-
* Open a PR to modify the [collection-index.yml](https://github.com/devcontainers/devcontainers.github.io/blob/gh-pages/_data/collection-index.yml) file
152-
153-
This index is from where [supporting tools](https://containers.dev/supporting) like [VS Code Dev Containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers) and [GitHub Codespaces](https://github.com/features/codespaces) surface Features for their dev container creation UI.
154-
155-
#### Using private Features in Codespaces
156-
157-
For any Features hosted in GHCR that are kept private, the `GITHUB_TOKEN` access token in your environment will need to have `package:read` and `contents:read` for the associated repository.
158-
159-
Many implementing tools use a broadly scoped access token and will work automatically. GitHub Codespaces uses repo-scoped tokens, and therefore you'll need to add the permissions in `devcontainer.json`
160-
161-
An example `devcontainer.json` can be found below.
162-
163-
```jsonc
164-
{
165-
"image": "mcr.microsoft.com/devcontainers/base:ubuntu",
166-
"features": {
167-
"ghcr.io/my-org/private-features/hello:1": {
168-
"greeting": "Hello"
169-
}
170-
},
171-
"customizations": {
172-
"codespaces": {
173-
"repositories": {
174-
"my-org/private-features": {
175-
"permissions": {
176-
"packages": "read",
177-
"contents": "read"
178-
}
179-
}
180-
}
181-
}
182-
}
183-
}
184-
```
23+
Please visit Exercism's [working locally](https://exercism.org/docs/using/solving-exercises/working-locally) documentation for further usage information.

src/circleci-cli/NOTES.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
# CircleCI CLI
2+
3+
Provides the `circleci` command at the shell. Using this tool requires authentication.
4+
5+
```shell
6+
circleci setup
7+
```
8+
9+
Please visit CircleCI's [local pipeline development](https://circleci.com/blog/local-pipeline-development/) blog post for further usage information.

src/circleci-cli/devcontainer-feature.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name": "CircleCI CLI",
33
"id": "circleci-cli",
44
"version": "1.0.0",
5-
"description": "Install the CircleCI CLI.",
5+
"description": "Install the CircleCI CLI. Also installs the CircleCI extension for vscode.",
66
"options": {
77
"version": {
88
"default": "latest",

src/exercism-cli/NOTES.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
# Exercism CLI
2+
3+
Provides the `exercism` command at the shell. Using this tool requires authentication.
4+
5+
```shell
6+
exercism configure --token=[TOKEN]
7+
```
8+
9+
Please visit Exercism's [working locally](https://exercism.org/docs/using/solving-exercises/working-locally) documentation for further usage information.

0 commit comments

Comments
 (0)