Merge pull request #401 from jesseduffield/add-dev-container

This commit is contained in:
Jesse Duffield 2022-11-15 19:48:17 +11:00 committed by GitHub
commit 83acb91d83
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 125 additions and 51 deletions

11
.devcontainer/Dockerfile Normal file
View file

@ -0,0 +1,11 @@
FROM mcr.microsoft.com/devcontainers/go:bullseye
RUN apt-get update && apt-get install -y \
curl \
git \
&& rm -rf /var/lib/apt/lists/*
RUN go install mvdan.cc/gofumpt@latest
ENV PATH="/root/go/bin:${PATH}"
RUN curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v1.50.0
RUN golangci-lint --version

View file

@ -0,0 +1,54 @@
{
"name": "Docker in Docker",
"build": {
"dockerfile": "./Dockerfile",
"context": "."
},
"features": {
"ghcr.io/devcontainers/features/common-utils:1": {
"installZsh": "true",
"upgradePackages": "false",
"uid": "1000",
"gid": "1000",
"installOhMyZsh": "true",
"nonFreePackages": "true"
},
"ghcr.io/devcontainers/features/docker-from-docker:1": {
"version": "latest",
"enableNonRootDocker": "true",
"moby": "true"
},
"ghcr.io/devcontainers/features/git:1": {},
"ghcr.io/devcontainers/features/go:1": {}
},
// Configure tool-specific properties.
"customizations": {
// Configure properties specific to VS Code.
"vscode": {
// Set *default* container specific settings.json values on container create.
"settings": {
"go.toolsManagement.checkForUpdates": "local",
"go.useLanguageServer": true,
"go.gopath": "~/go",
"[go]": {
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.organizeImports": true
}
},
"go.lintTool": "golangci-lint",
"gopls": {
"formatting.gofumpt": true,
"usePlaceholders": false // add parameter placeholders when completing a function
},
"files.eol": "\n"
},
// Add the IDs of extensions you want installed when the container is created.
"extensions": [
"golang.Go"
]
}
}
// TODO: make this work.
// "postStartCommand": "echo \"alias gr=\\\"go run /workspaces/lazydocker/main.go\\\"\" >> ~/.zhsrc"
}

View file

@ -1,11 +1,30 @@
package gui
import (
"os"
"github.com/fatih/color"
"github.com/jesseduffield/gocui"
"github.com/samber/lo"
)
// See https://github.com/xtermjs/xterm.js/issues/4238
// VSCode is soon to fix this in an upcoming update.
// Once that's done, we can scrap the HIDE_UNDERSCORES variable
var (
underscoreEnvChecked bool
hideUnderscores bool
)
func hideUnderScores() bool {
if !underscoreEnvChecked {
hideUnderscores = os.Getenv("TERM_PROGRAM") == "vscode"
underscoreEnvChecked = true
}
return hideUnderscores
}
type Views struct {
// side panels
Project *gocui.View
@ -155,7 +174,12 @@ func (gui *Gui) getInformationContent() string {
return informationStr
}
donate := color.New(color.FgMagenta, color.Underline).Sprint(gui.Tr.Donate)
attrs := []color.Attribute{color.FgMagenta}
if !hideUnderScores() {
attrs = append(attrs, color.Underline)
}
donate := color.New(attrs...).Sprint(gui.Tr.Donate)
return donate + " " + informationStr
}

3
test/Dockerfile Normal file
View file

@ -0,0 +1,3 @@
FROM alpine:latest
COPY . /app

25
test/docker-compose.yml Normal file
View file

@ -0,0 +1,25 @@
version: "3.5"
services:
my-service:
build:
dockerfile: Dockerfile
context: .
command: /app/print-random-stuff.sh
depends_on:
- my-service2
ports:
- 123:321
my-service2:
build:
dockerfile: Dockerfile
context: .
command: /app/print-random-stuff.sh
ports:
- 12345:12345
my-service3:
build:
dockerfile: Dockerfile
context: .
command: /app/print-random-stuff.sh

7
test/print-random-stuff.sh Executable file
View file

@ -0,0 +1,7 @@
#!/bin/sh
while true
do
echo $((1 + $RANDOM % 10))
sleep 1
done

View file

@ -1,24 +0,0 @@
# building the binary
FROM golang:1.11 as builder
# Add Maintainer Info
LABEL maintainer="Jesse Duffield <jessedduffield@gmail.com>"
# Set the Current Working Directory inside the container
WORKDIR /src/github.com/jesseduffield/lazydocker/test/printrandom
# Copy everything from the current directory to the PWD(Present Working Directory) inside the container
COPY . .
# Build the package
RUN go build
# putting binary into a minimal image
FROM scratch
WORKDIR /root/
COPY --from=builder /src/github.com/jesseduffield/lazydocker/test/printrandom/printrandom .
# Run the executable
CMD ["./printrandom"]

View file

@ -1,26 +0,0 @@
package main
import (
"fmt"
"math/rand"
"os"
"os/signal"
"time"
)
func main() {
exitOnInterrupt()
for range time.Tick(time.Second / 3) {
fmt.Println(rand.Intn(1000))
}
}
func exitOnInterrupt() {
c := make(chan os.Signal, 1)
signal.Notify(c, os.Interrupt)
go func() {
<-c
os.Exit(0)
}()
}

Binary file not shown.