mirror of
https://github.com/kingomarnajjar/desktop-environment.git
synced 2026-07-26 06:37:21 +10:00
merge
This commit is contained in:
commit
eddefde4a6
13 changed files with 96 additions and 44 deletions
40
.github/workflows/build-and-publish.yml
vendored
40
.github/workflows/build-and-publish.yml
vendored
|
|
@ -3,16 +3,32 @@ on: [push]
|
|||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@master
|
||||
- name: Publish to Registry
|
||||
uses: elgohr/Publish-Docker-Github-Action@master
|
||||
env:
|
||||
DESKTOP_ENVIRONMENT_USER: ${{ secrets.DESKTOP_ENVIRONMENT_USER }}
|
||||
DESKTOP_ENVIRONMENT_REGISTRY: ${{ github.actor }}
|
||||
with:
|
||||
dockerfile: docker/Dockerfile
|
||||
name: ${{ github.actor }}/desktop-environment:latest
|
||||
username: ${{ secrets.DOCKER_USERNAME }}
|
||||
password: ${{ secrets.DOCKER_PASSWORD }}
|
||||
buildargs: DESKTOP_ENVIRONMENT_USER,DESKTOP_ENVIRONMENT_REGISTRY
|
||||
|
||||
- name: Check out repository
|
||||
uses: actions/checkout@v2
|
||||
|
||||
- name: Sanitise Repository Name
|
||||
run: echo ::set-env name=GITHUB_REPOSITORY::$(echo ${{ github.repository }} | tr '[:upper:]' '[:lower:]')
|
||||
|
||||
- name: Sanitise Repository Owner
|
||||
run: echo ::set-env name=REPOSITORY_OWNER::$(echo ${{ github.repository_owner }} | tr '[:upper:]' '[:lower:]')
|
||||
|
||||
- name: Build and Push to GitHub Container Registry
|
||||
uses: whoan/docker-build-with-cache-action@master
|
||||
with:
|
||||
build_extra_args: --build-arg=DESKTOP_ENVIRONMENT_USER=${{ env.REPOSITORY_OWNER }}
|
||||
dockerfile: docker/Dockerfile
|
||||
image_name: desktop-environment
|
||||
push_git_tag: true
|
||||
registry: docker.pkg.github.com/${{ env.GITHUB_REPOSITORY }}
|
||||
username: ${{ env.REPOSITORY_OWNER }}
|
||||
password: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Run desktop environment tests
|
||||
run: ./docker/scripts/test.sh
|
||||
env:
|
||||
DESKTOP_ENVIRONMENT_REGISTRY: docker.pkg.github.com/${{ env.GITHUB_REPOSITORY }}
|
||||
DESKTOP_ENVIRONMENT_CONTAINER_TAG: ${{ github.ref }}
|
||||
continue-on-error: true
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ Set your [user configuration](docker/scripts/environment.sh#L3) and go.
|
|||
## Keybindings
|
||||
|
||||
```sh
|
||||
# Launch alacritty
|
||||
# Launch terminal
|
||||
Mod + Return
|
||||
|
||||
# Launch chrome
|
||||
|
|
@ -55,4 +55,5 @@ Mod + slash
|
|||
## Project Goals
|
||||
|
||||
- [x] A computer wholly defined in code.
|
||||
- [x] Only one command required to start from scratch.
|
||||
- [x] Only one command required to start from scratch.
|
||||
|
||||
|
|
|
|||
|
|
@ -1,11 +1,9 @@
|
|||
FROM ubuntu:19.04
|
||||
|
||||
ARG DESKTOP_ENVIRONMENT_HOST_USER_PASSWORD
|
||||
ARG DESKTOP_ENVIRONMENT_REGISTRY
|
||||
ARG DESKTOP_ENVIRONMENT_USER
|
||||
|
||||
ENV DESKTOP_ENVIRONMENT_HOST_USER_PASSWORD ${DESKTOP_ENVIRONMENT_HOST_USER_PASSWORD:-'$6$7De0aW9hUvGDKZmc$qrylcFmwKAL9iGNG9dvQ/GXCM4gLY.hES/P2d/3ZzRxkVMjD77WeTVSxV1P9XtmE9iAUmDwDTCHiVK.p5Ct1y1:18193:0:99999:7:::'}
|
||||
ENV DESKTOP_ENVIRONMENT_REGISTRY $DESKTOP_ENVIRONMENT_REGISTRY
|
||||
ENV DISPLAY :1
|
||||
ENV EDITOR nano
|
||||
ENV LANG en_US.UTF-8
|
||||
|
|
@ -40,7 +38,7 @@ RUN locale-gen $LANG && \
|
|||
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && \
|
||||
echo $TZ > /etc/timezone
|
||||
|
||||
# Install cloud computer utilities
|
||||
# Install desktop environment utilities
|
||||
RUN apt-get update -qq && \
|
||||
DEBIAN_FRONTEND=noninteractive apt-get install -qq --fix-missing \
|
||||
alsa-utils \
|
||||
|
|
@ -339,13 +337,15 @@ RUN git clone --depth 1 https://github.com/tmux-plugins/tpm $HOME/.tmux/plugins/
|
|||
# Install tmuxinator
|
||||
RUN gem install tmuxinator -v 1.1.5
|
||||
|
||||
# Install vs code, vs live share dependencies, and shfmt extension dependency
|
||||
# Install vs code, vs live share dependencies, shfmt extension dependency, and vs-wal
|
||||
RUN wget -O code.deb -nv https://go.microsoft.com/fwlink/?LinkID=760868 && \
|
||||
apt-get install -qq ./code.deb && \
|
||||
rm code.deb && \
|
||||
apt-get install -qq libicu[0-9][0-9] libkrb5-3 zlib1g libsecret-1-0 desktop-file-utils x11-utils && \
|
||||
wget -O /usr/local/bin/shfmt -nv https://github.com/mvdan/sh/releases/download/v2.6.3/shfmt_v2.6.3_linux_amd64 && \
|
||||
chmod +x /usr/local/bin/shfmt
|
||||
chmod +x /usr/local/bin/shfmt && \
|
||||
git clone https://github.com/Bluedrack28/vscode-wal.git ~/.vscode/extensions/vscode-wal && \
|
||||
cd ~/.vscode/extensions/vscode-wal && ./script.sh
|
||||
|
||||
# Install warnai
|
||||
RUN apt-get update -qq && \
|
||||
|
|
@ -405,18 +405,10 @@ RUN sed -i 's/allowed_users=console/allowed_users=anybody/' /etc/X11/Xwrapper.co
|
|||
echo needs_root_rights=yes >> /etc/X11/Xwrapper.config && \
|
||||
chmod u+s /usr/bin/xinit
|
||||
|
||||
# Create the docker group with the host os group id, backing up any existing group with docker group id
|
||||
ENV DOCKER_GROUP 999
|
||||
RUN getent group $DOCKER_GROUP | \
|
||||
grep -v docker | \
|
||||
cut -d: -f1 | \
|
||||
xargs groupmod --gid 9999 2>/dev/null || true
|
||||
RUN groupmod --gid $DOCKER_GROUP docker
|
||||
|
||||
# Create a non-root user for safe operation
|
||||
RUN useradd \
|
||||
--create-home \
|
||||
--groups $DOCKER_GROUP,audio,chrome,input,netdev,shadow,sudo,tty,video \
|
||||
--groups audio,chrome,docker,input,netdev,shadow,sudo,tty,video \
|
||||
--shell /bin/zsh \
|
||||
$USER
|
||||
|
||||
|
|
@ -435,10 +427,11 @@ ARG DOTFILES_CACHEBUST
|
|||
RUN DOTFILES_CACHEBUST=$DOTFILES_CACHEBUST echo "Building from dotfiles..."
|
||||
|
||||
# Clone user dotfiles
|
||||
RUN vcsh clone https://$DESKTOP_ENVIRONMENT_REGISTRY@github.com/$DESKTOP_ENVIRONMENT_REGISTRY/dotfiles.git && \
|
||||
RUN vcsh clone https://github.com/$DESKTOP_ENVIRONMENT_USER/dotfiles.git && \
|
||||
$HOME/.dotfiles-bootstrap.sh
|
||||
|
||||
# Record container build information
|
||||
ARG DESKTOP_CONTAINER_GIT_SHA
|
||||
ENV CONTAINER_GIT_SHA $DESKTOP_CONTAINER_GIT_SHA
|
||||
ENV CONTAINER_IMAGE_NAME sabrehagen/desktop-environment
|
||||
ARG DESKTOP_ENVIRONMENT_CONTAINER_IMAGE_NAME
|
||||
ENV DESKTOP_ENVIRONMENT_CONTAINER_IMAGE_NAME $DESKTOP_ENVIRONMENT_CONTAINER_IMAGE_NAME
|
||||
|
|
|
|||
|
|
@ -8,12 +8,12 @@ DESKTOP_ENVIRONMENT_HOST_USER_PASSWORD=$(sudo cat /etc/shadow | grep $DESKTOP_EN
|
|||
|
||||
docker build \
|
||||
--build-arg DESKTOP_CONTAINER_GIT_SHA=$(git --git-dir $REPO_ROOT/.git rev-parse HEAD | cut -b 1-7) \
|
||||
--build-arg DESKTOP_ENVIRONMENT_CONTAINER_IMAGE_NAME="$DESKTOP_ENVIRONMENT_REGISTRY/$DESKTOP_ENVIRONMENT_CONTAINER_IMAGE" \
|
||||
--build-arg DESKTOP_ENVIRONMENT_HOST_USER_PASSWORD="$DESKTOP_ENVIRONMENT_HOST_USER_PASSWORD" \
|
||||
--build-arg DESKTOP_ENVIRONMENT_REGISTRY="$DESKTOP_ENVIRONMENT_REGISTRY" \
|
||||
--build-arg DESKTOP_ENVIRONMENT_USER="$DESKTOP_ENVIRONMENT_USER" \
|
||||
--build-arg DOTFILES_CACHEBUST=$(cat $REPO_ROOT/.dotfiles-cachebust 2>/dev/null) \
|
||||
--file $REPO_ROOT/docker/Dockerfile \
|
||||
--network host \
|
||||
--tag $DESKTOP_ENVIRONMENT_REGISTRY/$DESKTOP_ENVIRONMENT_CONTAINER_NAME:$DESKTOP_ENVIRONMENT_CONTAINER_TAG \
|
||||
--tag $DESKTOP_ENVIRONMENT_REGISTRY/$DESKTOP_ENVIRONMENT_CONTAINER_NAME:latest \
|
||||
--tag $DESKTOP_ENVIRONMENT_REGISTRY/$DESKTOP_ENVIRONMENT_CONTAINER_IMAGE:$DESKTOP_ENVIRONMENT_CONTAINER_TAG \
|
||||
--tag $DESKTOP_ENVIRONMENT_REGISTRY/$DESKTOP_ENVIRONMENT_CONTAINER_IMAGE:latest \
|
||||
$REPO_ROOT/docker
|
||||
|
|
|
|||
|
|
@ -1,10 +1,12 @@
|
|||
REPO_ROOT=$(dirname $(readlink -f $0))/../..
|
||||
|
||||
DESKTOP_ENVIRONMENT_CONTAINER_NAME=desktop-environment
|
||||
DESKTOP_ENVIRONMENT_REGISTRY=sabrehagen
|
||||
DESKTOP_ENVIRONMENT_USER=$USER
|
||||
DESKTOP_ENVIRONMENT_CONTAINER_IMAGE=desktop-environment
|
||||
DESKTOP_ENVIRONMENT_CONTAINER_NAME=${DESKTOP_ENVIRONMENT_CONTAINER_NAME-$DESKTOP_ENVIRONMENT_CONTAINER_IMAGE}
|
||||
DESKTOP_ENVIRONMENT_REGISTRY=${DESKTOP_ENVIRONMENT_REGISTRY-$DESKTOP_ENVIRONMENT_USER}
|
||||
|
||||
# Desktop environment repository information
|
||||
echo export DESKTOP_ENVIRONMENT_CONTAINER_IMAGE=$DESKTOP_ENVIRONMENT_CONTAINER_IMAGE
|
||||
echo export DESKTOP_ENVIRONMENT_CONTAINER_NAME=$DESKTOP_ENVIRONMENT_CONTAINER_NAME
|
||||
echo export DESKTOP_ENVIRONMENT_CONTAINER_TAG=${DESKTOP_ENVIRONMENT_CONTAINER_TAG-$(git --git-dir $REPO_ROOT/.git rev-parse --abbrev-ref HEAD)}
|
||||
echo export DESKTOP_ENVIRONMENT_REGISTRY=$DESKTOP_ENVIRONMENT_REGISTRY
|
||||
|
|
|
|||
|
|
@ -5,4 +5,5 @@ eval "$($REPO_ROOT/docker/scripts/environment.sh)"
|
|||
|
||||
docker exec \
|
||||
--interactive \
|
||||
$DESKTOP_ENVIRONMENT_CONTAINER_NAME zsh -c "$*"
|
||||
--user root \
|
||||
$DESKTOP_ENVIRONMENT_CONTAINER_IMAGE zsh -c "$*"
|
||||
|
|
|
|||
|
|
@ -6,5 +6,4 @@ eval "$($REPO_ROOT/docker/scripts/environment.sh)"
|
|||
docker exec \
|
||||
--interactive \
|
||||
--tty \
|
||||
--user $DESKTOP_ENVIRONMENT_USER \
|
||||
$DESKTOP_ENVIRONMENT_CONTAINER_NAME zsh -c "$*"
|
||||
$DESKTOP_ENVIRONMENT_CONTAINER_IMAGE zsh -c "$*"
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ eval "$($REPO_ROOT/docker/scripts/environment.sh)"
|
|||
|
||||
# Remove all non desktop environment containers
|
||||
docker ps -a | \
|
||||
grep -v " $DESKTOP_ENVIRONMENT_CONTAINER_NAME" | \
|
||||
grep -v " $DESKTOP_ENVIRONMENT_CONTAINER_IMAGE" | \
|
||||
grep -v "CONTAINER " | \
|
||||
cut -b 1-20 | \
|
||||
xargs docker rm -f
|
||||
|
|
|
|||
|
|
@ -3,4 +3,4 @@ REPO_ROOT=$(dirname $(readlink -f $0))/../..
|
|||
# Export desktop environment shell configuration
|
||||
eval "$($REPO_ROOT/docker/scripts/environment.sh)"
|
||||
|
||||
docker push $DESKTOP_ENVIRONMENT_REGISTRY/$DESKTOP_ENVIRONMENT_CONTAINER_NAME:$DESKTOP_ENVIRONMENT_CONTAINER_TAG
|
||||
docker push $DESKTOP_ENVIRONMENT_REGISTRY/$DESKTOP_ENVIRONMENT_CONTAINER_IMAGE:$DESKTOP_ENVIRONMENT_CONTAINER_TAG
|
||||
|
|
|
|||
|
|
@ -33,7 +33,6 @@ docker run \
|
|||
--network host \
|
||||
--rm \
|
||||
--security-opt apparmor:unconfined \
|
||||
--user $DESKTOP_ENVIRONMENT_USER \
|
||||
--volume /dev/displaylink:/dev/displaylink \
|
||||
--volume /dev/shm:/dev/shm \
|
||||
--volume /run/udev:/run/udev \
|
||||
|
|
@ -67,11 +66,14 @@ docker run \
|
|||
--volume DESKTOP_ENVIRONMENT_USER_TORRENTS:$DESKTOP_ENVIRONMENT_USER_TORRENTS \
|
||||
--volume DESKTOP_ENVIRONMENT_USER_VIDEOS:$DESKTOP_ENVIRONMENT_USER_VIDEOS \
|
||||
--workdir $DESKTOP_ENVIRONMENT_USER_HOME \
|
||||
$DESKTOP_ENVIRONMENT_REGISTRY/$DESKTOP_ENVIRONMENT_CONTAINER_NAME:$DESKTOP_ENVIRONMENT_CONTAINER_TAG \
|
||||
$DESKTOP_ENVIRONMENT_REGISTRY/$DESKTOP_ENVIRONMENT_CONTAINER_IMAGE:$DESKTOP_ENVIRONMENT_CONTAINER_TAG \
|
||||
sleep infinity
|
||||
|
||||
# Wait until the desktop environment container is running before proceeding
|
||||
until docker inspect $DESKTOP_ENVIRONMENT_CONTAINER_NAME | grep Status | grep -m 1 running >/dev/null; do sleep 1; done
|
||||
|
||||
# Make the container docker group id the same as the host docker group id so mounted docker socket permissions match
|
||||
$REPO_ROOT/docker/scripts/exec-root.sh groupmod -g $(grep docker /etc/group | cut -f3 -d:) docker
|
||||
|
||||
# Start the desktop environment inside the container
|
||||
$REPO_ROOT/docker/scripts/exec.sh /home/$DESKTOP_ENVIRONMENT_USER/.config/scripts/startup.sh
|
||||
|
|
|
|||
|
|
@ -3,4 +3,4 @@ REPO_ROOT=$(dirname $(readlink -f $0))/../..
|
|||
# Export desktop environment shell configuration
|
||||
eval "$($REPO_ROOT/docker/scripts/environment.sh)"
|
||||
|
||||
docker rm -f $DESKTOP_ENVIRONMENT_CONTAINER_NAME
|
||||
docker rm -f $DESKTOP_ENVIRONMENT_CONTAINER_IMAGE
|
||||
|
|
|
|||
38
docker/scripts/test.sh
Executable file
38
docker/scripts/test.sh
Executable file
|
|
@ -0,0 +1,38 @@
|
|||
REPO_ROOT=$(dirname $(readlink -f $0))/../..
|
||||
|
||||
# Export desktop environment shell configuration
|
||||
eval "$($REPO_ROOT/docker/scripts/environment.sh)"
|
||||
|
||||
# Ensure the desktop environment test network exists
|
||||
docker network create $DESKTOP_ENVIRONMENT_DOCKER_NETWORK
|
||||
|
||||
# Set the desktop environment test container name
|
||||
DESKTOP_ENVIRONMENT_CONTAINER_NAME=${DESKTOP_ENVIRONMENT_CONTAINER_IMAGE}-test-$(date +%s)
|
||||
|
||||
# Start the desktop environment test container
|
||||
docker run \
|
||||
--detach \
|
||||
--env DESKTOP_ENVIRONMENT_USER \
|
||||
--name $DESKTOP_ENVIRONMENT_CONTAINER_NAME \
|
||||
--rm \
|
||||
--workdir $DESKTOP_ENVIRONMENT_USER_HOME \
|
||||
$DESKTOP_ENVIRONMENT_REGISTRY/$DESKTOP_ENVIRONMENT_CONTAINER_IMAGE:$DESKTOP_ENVIRONMENT_CONTAINER_TAG \
|
||||
sleep infinity
|
||||
|
||||
exit 1
|
||||
|
||||
# Wait until the desktop environment test container is running before proceeding
|
||||
until docker inspect $DESKTOP_ENVIRONMENT_CONTAINER_NAME | grep Status | grep -m 1 running >/dev/null; do sleep 1; done
|
||||
|
||||
# Start the vnc server inside the desktop environment test container
|
||||
$REPO_ROOT/docker/scripts/exec.sh /home/$DESKTOP_ENVIRONMENT_USER/.config/scripts/startup.sh
|
||||
|
||||
# Check desktop environment vnc server started successfully
|
||||
$REPO_ROOT/docker/scripts/exec.sh "curl --silent localhost | grep -iq vnc"
|
||||
TEST_RESULT=$?
|
||||
|
||||
# Remove desktop environment test container
|
||||
docker rm -f $DESKTOP_ENVIRONMENT_CONTAINER_NAME
|
||||
|
||||
# Exit with test result exit code
|
||||
exit $TEST_RESULT
|
||||
|
|
@ -7,7 +7,7 @@ eval "$($REPO_ROOT/docker/scripts/environment.sh)"
|
|||
docker exec \
|
||||
--interactive \
|
||||
--tty \
|
||||
$DESKTOP_ENVIRONMENT_CONTAINER_NAME \
|
||||
$DESKTOP_ENVIRONMENT_CONTAINER_IMAGE \
|
||||
tmux new-session \
|
||||
-s desktop-environment-shell-$(date +%s) \
|
||||
-t desktop-environment-shell
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue