Skip to content

Commit

Permalink
initial implementation
Browse files Browse the repository at this point in the history
  • Loading branch information
Aragas committed Apr 27, 2024
1 parent d32bbe1 commit d65ba70
Show file tree
Hide file tree
Showing 16 changed files with 318 additions and 0 deletions.
26 changes: 26 additions & 0 deletions .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
{
"image": "mcr.microsoft.com/devcontainers/javascript-node:1-20-bookworm",
"customizations": {
"vscode": {
"settings": {
"json.schemas": [
{
"fileMatch": [
"*/devcontainer-feature.json"
],
"url": "https://raw.githubusercontent.com/devcontainers/spec/main/schemas/devContainerFeature.schema.json"
}
]
},
"extensions": [
"mads-hartmann.bash-ide-vscode",
"github.vscode-github-actions"
]
}
},
"features": {
"ghcr.io/devcontainers/features/docker-in-docker:2": {}
},
"remoteUser": "node",
"updateContentCommand": "npm install -g @devcontainers/cli"
}
47 changes: 47 additions & 0 deletions .github/workflows/features-release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
name: "Release dev container features & Generate Documentation"
on:
workflow_dispatch:

jobs:
deploy:
if: ${{ github.ref == 'refs/heads/master' }}
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write
packages: write
steps:
- uses: actions/checkout@v4

- name: "Publish Features"
uses: devcontainers/action@v1
with:
publish-features: "true"
base-path-to-features: "./src"
generate-docs: "true"

env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- name: Create PR for Documentation
id: push_image_info
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
set -e
echo "Start."
# Configure git and Push updates
git config --global user.email github-actions[bot]@users.noreply.github.com
git config --global user.name github-actions[bot]
git config pull.rebase false
branch=automated-documentation-update-$GITHUB_RUN_ID
git checkout -b $branch
message='Automated documentation update'
# Add / update and commit
git add */**/README.md
git commit -m 'Automated documentation update [skip ci]' || export NO_UPDATES=true
# Push
if [ "$NO_UPDATES" != "true" ] ; then
git push origin "$branch"
gh pr create --title "$message" --body "$message"
fi
64 changes: 64 additions & 0 deletions .github/workflows/features-test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
name: "CI - Test Features"
on:
push:
branches:
- master
pull_request:
workflow_dispatch:

jobs:
test-autogenerated:
runs-on: ubuntu-latest
continue-on-error: true
strategy:
matrix:
features:
- 7z
- bannerlord
- mono
- upgrade
- vortex
baseImage:
- debian:latest
- ubuntu:latest
- mcr.microsoft.com/devcontainers/base:ubuntu
steps:
- uses: actions/checkout@v4

- name: "Install latest devcontainer CLI"
run: npm install -g @devcontainers/cli

- name: "Generating tests for '${{ matrix.features }}' against '${{ matrix.baseImage }}'"
run: devcontainer features test --skip-scenarios -f ${{ matrix.features }} -i ${{ matrix.baseImage }} .

test-scenarios:
runs-on: ubuntu-latest
continue-on-error: true
strategy:
matrix:
features:
- 7z
- bannerlord
- mono
- upgrade
- vortex
steps:
- uses: actions/checkout@v4

- name: "Install latest devcontainer CLI"
run: npm install -g @devcontainers/cli

- name: "Generating tests for '${{ matrix.features }}' scenarios"
run: devcontainer features test -f ${{ matrix.features }} --skip-autogenerated --skip-duplicated .

test-global:
runs-on: ubuntu-latest
continue-on-error: true
steps:
- uses: actions/checkout@v4

- name: "Install latest devcontainer CLI"
run: npm install -g @devcontainers/cli

- name: "Testing global scenarios"
run: devcontainer features test --global-scenarios-only .
16 changes: 16 additions & 0 deletions .github/workflows/features-validate.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
name: "Validate devcontainer-feature.json files"
on:
workflow_dispatch:
pull_request:

jobs:
validate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3

- name: "Validate devcontainer-feature.json files"
uses: devcontainers/action@v1
with:
validate-only: "true"
base-path-to-features: "./features"
58 changes: 58 additions & 0 deletions .github/workflows/image-release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
name: Dev Container Build and Push Image

on:
push:
branches:
- master
paths:
- '.image-base/**/*'
workflow_dispatch:

jobs:
build-and-publish-docker:
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Set up QEMU
uses: docker/setup-qemu-action@v3
with:
platforms: all

- name: Set up Docker Buildx
id: buildx
uses: docker/setup-buildx-action@v3

- name: Cache Docker layers
uses: actions/cache@v4
with:
path: /tmp/.buildx-cache
key: ${{ runner.os }}-buildx-${{ github.sha }}
restore-keys: |
${{ runner.os }}-buildx-
- name: Login to Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: BUTR
password: ${{ secrets.TOKEN_GPR }}

- name: Build and Push
id: docker_build
uses: docker/build-push-action@v5
with:
builder: ${{ steps.buildx.outputs.name }}
context: ./
file: ./image-base/Dockerfile
platforms: linux/amd64,linux/arm64
push: true
tags: ghcr.io/butr/devcontainer:latest
cache-from: type=local,src=/tmp/.buildx-cache
cache-to: type=local,dest=/tmp/.buildx-cache

- name: Image digest
run: echo ${{ steps.docker_build.outputs.digest }}
7 changes: 7 additions & 0 deletions features/7z/devcontainer-feature.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"id": "7z",
"version": "1.0.0",
"name": "7z",
"documentationURL": "",
"description": "7z"
}
10 changes: 10 additions & 0 deletions features/7z/install.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
#!/bin/bash
export DEBIAN_FRONTEND=noninteractive

echo "(*) Installing 7z"
apt-get update
apt-get install -y --no-install-recommends p7zip-full
apt-get clean -y
rm -rf /var/lib/apt/lists/*;

echo "Done!"
17 changes: 17 additions & 0 deletions features/bannerlord/devcontainer-feature.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"id": "bannerlord",
"version": "1.0.0",
"name": "Bannerlord",
"documentationURL": "",
"description": "Bannerlord",
"containerEnv": {
"BANNERLORD_GAME_DIR": "/bannerlord"
},
"mounts": [
{
"source":"${localEnv:BANNERLORD_GAME_DIR}",
"target":"/bannerlord",
"type":"bind"
}
]
}
2 changes: 2 additions & 0 deletions features/bannerlord/install.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
#!/bin/bash
export DEBIAN_FRONTEND=noninteractive
7 changes: 7 additions & 0 deletions features/mono/devcontainer-feature.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"id": "mono",
"version": "1.0.0",
"name": "Mono",
"documentationURL": "",
"description": "Mono"
}
10 changes: 10 additions & 0 deletions features/mono/install.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
#!/bin/bash
export DEBIAN_FRONTEND=noninteractive

echo "(*) Installing mono"
apt-get update
apt-get install -y --no-install-recommends mono-devel
apt-get clean -y
rm -rf /var/lib/apt/lists/*;

echo "Done!"
7 changes: 7 additions & 0 deletions features/upgrade/devcontainer-feature.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"id": "upgrade",
"version": "1.0.0",
"name": "Upgrade",
"documentationURL": "",
"description": "Upgrade"
}
10 changes: 10 additions & 0 deletions features/upgrade/install.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
#!/bin/bash
export DEBIAN_FRONTEND=noninteractive

echo "(*) Upgrading"
apt-get update
apt-get upgrade -y
apt-get clean -y
rm -rf /var/lib/apt/lists/*;

echo "Done!"
14 changes: 14 additions & 0 deletions features/vortex/devcontainer-feature.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"id": "vortex",
"version": "1.0.0",
"name": "Vortex",
"documentationURL": "",
"description": "Vortex",
"mounts": [
{
"source":"${localEnv:HOME}${localEnv:USERPROFILE}/AppData/Roaming/Vortex/plugins",
"target":"/vortex-plugins",
"type":"bind"
}
]
}
2 changes: 2 additions & 0 deletions features/vortex/install.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
#!/bin/bash
export DEBIAN_FRONTEND=noninteractive
21 changes: 21 additions & 0 deletions image-base/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# [Choice] Debian version (use bullseye on local arm64/Apple Silicon): bookworm, bullseye, buster
ARG VARIANT="bookworm"
FROM buildpack-deps:${VARIANT}-curl

USER root

ARG USERNAME=developer
ARG USER_UID=1000
ARG USER_GID=$USER_UID

# Create the user
RUN groupadd --gid $USER_GID $USERNAME \
&& useradd -s /bin/bash --uid $USER_UID --gid $USER_GID -m $USERNAME \
#
# [Optional] Add sudo support. Omit if you don't need to install software after connecting.
&& apt-get update \
&& apt-get install -y sudo \
&& echo $USERNAME ALL=\(root\) NOPASSWD:ALL > /etc/sudoers.d/$USERNAME \
&& chmod 0440 /etc/sudoers.d/$USERNAME

USER $USERNAME

0 comments on commit d65ba70

Please sign in to comment.