Skip to content

Commit c89d8c5

Browse files
author
Thomas G.
committed
feat: add features
1 parent 574fa34 commit c89d8c5

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+533
-638
lines changed

.devcontainer/devcontainer.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,10 @@
1818
}
1919
},
2020
"features": {
21-
"ghcr.io/devcontainers/features/docker-in-docker:2": {}
21+
"ghcr.io/devcontainers/features/docker-in-docker:2": {},
22+
"../src/gitutils": {},
23+
"../src/gitversion": {}
2224
},
2325
"remoteUser": "node",
2426
"updateContentCommand": "npm install -g @devcontainers/cli"
25-
}
27+
}

.github/workflows/release.yaml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
name: "Release dev container features & Generate Documentation"
22
on:
3-
workflow_dispatch:
3+
push:
4+
branches:
5+
- main
46

57
jobs:
68
deploy:

.github/workflows/test.yaml

Lines changed: 0 additions & 58 deletions
This file was deleted.

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 Tomgrv
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: 30 additions & 161 deletions
Original file line numberDiff line numberDiff line change
@@ -1,188 +1,57 @@
1-
# Dev Container Features: Self Authoring Template
2-
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).
6-
7-
## Example Contents
8-
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.
1+
# Dev Container Features
102

11-
### `hello`
3+
This repository contains a collection of features that can be used to enhance the development experience in a [Visual Studio Code Dev Container](https://code.visualstudio.com/docs/remote/containers). The features are organized in separate folders and can be used individually.
124

13-
Running `hello` inside the built container will print the greeting provided to it via its `greeting` option.
5+
## Features Overview
146

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-
```
7+
### GitVersion
258

26-
```bash
27-
$ hello
9+
The [GitVersion](./src/gitversion/) feature installs GitVersion in the dev container. GitVersion is a tool that calculates a version number based on the Git history. The version number is written to a file that can be used in the build process.
2810

29-
Hello, user.
30-
```
11+
Originally, GitVersion was designed to be used in a CI/CD pipeline. However, it can also be used in a dev container to calculate the version number of the application.
3112

32-
### `color`
13+
More information about GitVersion can be found on the [GitVersion GitHub page](https://github.com/GitTools/GitVersion).
3314

34-
Running `color` inside the built container will print your favorite color to standard out.
15+
### GitUtils
3516

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-
```
17+
The [GitUtils](./src/gitutils/) feature installs a collection of Git utilities in the dev container. The utilities are useful for automating Git workflows.
4618

47-
```bash
48-
$ color
19+
The following utilities are included: [./src/gitutils/alias.json](./src/gitutils/alias.json)
4920

50-
my favorite color is green
51-
```
21+
#### Interactive Utilities
5222

53-
## Repo and Feature Structure
23+
- `git fixup` - Amend the specified commit with current changes and rebase
5424

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`.
25+
#### GitFlow
5626

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-
...
69-
```
27+
Additionnaly, the feature installs the [git-flow](https:://github.com/nvie/gitflow) extension and sets up the Git configuration to use it.
7028

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.
29+
Shortcuts are also added to the `git` command to make it easier to use the `git-flow` commands:
7230

73-
### Options
31+
- `git beta` is a shortcut for `git flow release start`
32+
- `git hfix` is a shortcut for `git flow hotfix start`
33+
- `git prod` is a shortcut for `git flow release finish` and `git flow hotfix finish`
7434

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).
35+
Those shortcuts work in cunjunction with the `gitversion` utility to automatically update the version number of the application.
7636

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".
37+
### Act
7838

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-
}
95-
```
39+
The [Act](./src/act/) feature installs the [nektos/act] tool in the dev container. Act is a tool that allows you to run GitHub Actions locally.
9640

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).
41+
Originally, Act was designed to be used in a CI/CD pipeline. However, it can also be used in a dev container to test GitHub Actions locally.
9842

99-
```bash
100-
#!/bin/bash
43+
More information about Act can be found on the [Act GitHub page](https://github.com/nektos/act).
10144

102-
echo "Activating feature 'color'"
103-
echo "The provided favorite color is: ${FAVORITE}"
45+
### PECL
10446

105-
...
106-
```
47+
The [PECL](./src/pecl/) feature installs the PHP Extension Community Library (PECL) in the dev container. PECL is a repository for PHP extensions.
10748

108-
## Distributing Features
49+
More information about PECL can be found on the [PECL website](https://pecl.php.net/).
10950

110-
### Versioning
51+
## Contributing
11152

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).
53+
If you have a feature that you would like to add to this repository, please open an issue or submit a pull request.
11354

114-
### Publishing
55+
## License
11556

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.
123-
124-
*Allow GitHub Actions to create and approve pull requests* should be enabled in the repository's `Settings > Actions > General > Workflow permissions` for auto generation of `src/<feature>/README.md` per Feature (which merges any existing `src/<feature>/NOTES.md`).
125-
126-
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:
127-
128-
```
129-
ghcr.io/devcontainers/feature-starter/color:1
130-
ghcr.io/devcontainers/feature-starter/hello:1
131-
```
132-
133-
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.
134-
135-
'`devcontainers/feature-starter`' is known as the feature collection namespace.
136-
137-
### Marking Feature Public
138-
139-
Note that by default, GHCR packages are marked as `private`. To stay within the free tier, Features need to be marked as `public`.
140-
141-
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:
142-
143-
```
144-
https://github.com/users/<owner>/packages/container/<repo>%2F<featureName>/settings
145-
```
146-
147-
<img width="669" alt="image" src="https://user-images.githubusercontent.com/23246594/185244705-232cf86a-bd05-43cb-9c25-07b45b3f4b04.png">
148-
149-
### Adding Features to the Index
150-
151-
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:
152-
153-
* Go to [github.com/devcontainers/devcontainers.github.io](https://github.com/devcontainers/devcontainers.github.io)
154-
* This is the GitHub repo backing the [containers.dev](https://containers.dev/) spec site
155-
* Open a PR to modify the [collection-index.yml](https://github.com/devcontainers/devcontainers.github.io/blob/gh-pages/_data/collection-index.yml) file
156-
157-
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.
158-
159-
#### Using private Features in Codespaces
160-
161-
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.
162-
163-
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`
164-
165-
An example `devcontainer.json` can be found below.
166-
167-
```jsonc
168-
{
169-
"image": "mcr.microsoft.com/devcontainers/base:ubuntu",
170-
"features": {
171-
"ghcr.io/my-org/private-features/hello:1": {
172-
"greeting": "Hello"
173-
}
174-
},
175-
"customizations": {
176-
"codespaces": {
177-
"repositories": {
178-
"my-org/private-features": {
179-
"permissions": {
180-
"packages": "read",
181-
"contents": "read"
182-
}
183-
}
184-
}
185-
}
186-
}
187-
}
188-
```
57+
This repository is licensed under the [MIT License](./LICENSE).

src/act/README.md

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
2+
# Nektos/Act
3+
4+
This feature provides a tool for running GitHub Actions locally
5+
6+
## Example Usage
7+
8+
```json
9+
"features": {
10+
"ghcr.io/tomgrv/devcontainer-features/act:1": {
11+
"version": "latest"
12+
}
13+
}
14+
```
15+
16+
## Options
17+
18+
| Options Id | Description | Type | Default Value |
19+
|-----|-----|-----|-----|
20+
| version | The version of GitUtils to install. | string | latest |
21+
22+
## Contributing
23+
24+
If you have a feature that you would like to add to this repository, please open an issue or submit a pull request.

src/act/devcontainer-feature.json

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
{
2+
"name": "Nektos Act",
3+
"id": "act",
4+
"version": "1.0.4",
5+
"description": "A tool for running GitHub Actions locally",
6+
"installsAfter": [
7+
"ghcr.io/devcontainers/features/common-utils"
8+
],
9+
"options": {
10+
"version": {
11+
"type": "string",
12+
"description": "The version of act to install",
13+
"default": "master"
14+
}
15+
},
16+
}

src/act/install.sh

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
#!/bin/sh
2+
set -e
3+
4+
echo "Activating feature 'nektos/act'"
5+
6+
### Install Act
7+
curl --proto '=https' --tlsv1.2 -sSf https://raw.githubusercontent.com/nektos/act/${VERSION}/install.sh | sudo bash -s -- -b /usr/local/bin

src/color/README.md

Lines changed: 0 additions & 26 deletions
This file was deleted.

0 commit comments

Comments
 (0)