Skip to content

Commit

Permalink
Initial
Browse files Browse the repository at this point in the history
  • Loading branch information
bennettgoble committed May 6, 2024
0 parents commit b7b040c
Show file tree
Hide file tree
Showing 15 changed files with 663 additions and 0 deletions.
11 changes: 11 additions & 0 deletions .github/dependabot.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
version: 2
updates:
- package-ecosystem: github-actions
directory: /
schedule:
interval: weekly

- package-ecosystem: gomod
directory: /
schedule:
interval: weekly
108 changes: 108 additions & 0 deletions .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
name: CI

on:
pull_request:
push:
branches: [main]
tags: [v*]

permissions:
contents: write

jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- uses: actions/setup-go@v5
with:
go-version: ~1.22

- name: Lint
uses: secondlife-3p/golangci-lint-action@v5
with:
version: latest

- name: Test
run: |
go mod tidy
go test -v
build-image:
runs-on: ubuntu-latest
needs: test
steps:
- uses: actions/checkout@v4

- name: Docker meta
id: meta
uses: docker/metadata-action@v5
with:
images: lindenlab/debserve
tags: |
type=ref,event=branch
type=ref,event=pr
type=semver,pattern={{version}}
type=semver,pattern={{major}}.{{minor}}
type=semver,pattern={{major}}
- name: Set up QEMU
uses: docker/setup-qemu-action@v3

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

- name: Login to Docker Hub
uses: docker/login-action@v3
if: startsWith(github.ref, 'refs/tags/v')
with:
username: ${{ secrets.SHARED_DOCKERHUB_USER }}
password: ${{ secrets.SHARED_DOCKERHUB_TOKEN }}

- name: Build and push
uses: docker/build-push-action@v5
with:
context: .
push: ${{ startsWith(github.ref, 'refs/tags/v') }}
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
platforms: linux/amd64,linux/arm64

- name: Docker Hub Description
uses: secondlife-3p/dockerhub-description@v4
if: startsWith(github.ref, 'refs/tags/v')
with:
username: ${{ secrets.SHARED_DOCKERHUB_USER }}
password: ${{ secrets.SHARED_DOCKERHUB_TOKEN }}
repository: lindenlab/debserve
short-description: Self-contained debian package server
build-package:
runs-on: ubuntu-latest
needs: test
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Choose GoReleaser args
shell: bash
env:
IS_TAG: ${{ startsWith(github.ref, 'refs/tags/v') }}
id: goreleaser-args
run: |
if [[ "$IS_TAG" == "true" ]]
then
echo "Building for a tag: do a fully regular gorelease" >&2
echo "value=" >> $GITHUB_OUTPUT
else
echo "Not building for a tag: do the gorelease in snapshot mode" >&2
echo "value=--snapshot" >> $GITHUB_OUTPUT
fi
- name: Run GoReleaser
uses: goreleaser/goreleaser-action@v5
with:
version: v1.25.1
args: release ${{ steps.goreleaser-args.outputs.value }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
.vscode/
debserve
Packages
Packages.*
dist/
28 changes: 28 additions & 0 deletions .goreleaser.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
version: 1

before:
hooks:
- go mod tidy

builds:
- env:
- CGO_ENABLED=0
goos:
- linux
- windows
- darwin

archives:
- format: tar.gz
# this name template makes the OS and Arch compatible with the results of `uname`.
name_template: >-
{{ .ProjectName }}_
{{- title .Os }}_
{{- if eq .Arch "amd64" }}x86_64
{{- else if eq .Arch "386" }}i386
{{- else }}{{ .Arch }}{{ end }}
{{- if .Arm }}v{{ .Arm }}{{ end }}
# use zip for windows archives
format_overrides:
- goos: windows
format: zip
18 changes: 18 additions & 0 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.5.0
hooks:
- id: check-yaml
- id: trailing-whitespace
exclude: main_test.go
- repo: https://github.com/golangci/golangci-lint
rev: v1.58.0
hooks:
- id: golangci-lint
- repo: local
hooks:
- id: test
name: go test
entry: go test
language: system
types: [go]
19 changes: 19 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
FROM golang:1.22-alpine AS builder

WORKDIR /app

COPY go.mod go.sum ./
RUN go mod download
COPY *.go ./
RUN CGO_ENABLED=0 GOOS=linux go build -o debserve

FROM alpine:3

WORKDIR /packages

COPY ./as-pwd /usr/local/bin/as-pwd
RUN apk add --no-cache su-exec
COPY --from=builder /app/debserve /usr/local/bin/debserve

ENTRYPOINT ["as-pwd"]
CMD ["debserve", "--watch", "--listen", ":80"]
20 changes: 20 additions & 0 deletions LICENSE
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
Copyright (c) 2024 Linden Research, Inc.

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
42 changes: 42 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
# Debserve

**debserve** is a small, self-contained debian package indexer and server
designed to scratch a very specific itch: installing local debian files
into docker images. It may have other utility.

## Instructions

By default, **debserve** will scan for \*.deb files in the current directory
and host them at localhost:8080. Additional options:

```
A self-contained debian package indexer and server.
Usage: ./debserve [options] [folder]
-l string
HTTP server listen location (shorthand) (default "localhost:8080")
-listen string
HTTP server listen location (default "localhost:8080")
-r Search child directories (shorthand)
-recursive
Search child directories
-s Enable silent mode (shorthand)
-silent
Enable silent mode
-v Enable verbose mode (shorthand)
-verbose
Enable verbose mode
-w Enable watch mode (shorthand)
-watch
Enable watch mode
```

## Docker image

A docker image, `lindenlab/debserve`, is also available, and can use a local volume mount
to index and serve local packages:

```sh
docker run -it --rm -v $(pwd):/packages -p 12321:80 lindenlab/debserve
```
11 changes: 11 additions & 0 deletions as-pwd
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
#!/bin/sh

# Run the command as the user who owns the pwd

set -e

pwd=$(pwd)
user="$(stat -c "%u" "$pwd")"
group="$(stat -c "%g" "$pwd")"

exec su-exec $user:$group "$@"
Binary file added examples/test-pkg1_1.0.0_all.deb
Binary file not shown.
Binary file added examples/test-pkg2_1.0.0_amd64.deb
Binary file not shown.
12 changes: 12 additions & 0 deletions go.mod
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
module github.com/secondlife/debserve

go 1.22.2

require (
github.com/blakesmith/ar v0.0.0-20190502131153-809d4375e1fb
github.com/dsnet/compress v0.0.1
github.com/fsnotify/fsnotify v1.7.0
github.com/ulikunitz/xz v0.5.12
)

require golang.org/x/sys v0.4.0 // indirect
14 changes: 14 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
github.com/blakesmith/ar v0.0.0-20190502131153-809d4375e1fb h1:m935MPodAbYS46DG4pJSv7WO+VECIWUQ7OJYSoTrMh4=
github.com/blakesmith/ar v0.0.0-20190502131153-809d4375e1fb/go.mod h1:PkYb9DJNAwrSvRx5DYA+gUcOIgTGVMNkfSCbZM8cWpI=
github.com/dsnet/compress v0.0.1 h1:PlZu0n3Tuv04TzpfPbrnI0HW/YwodEXDS+oPKahKF0Q=
github.com/dsnet/compress v0.0.1/go.mod h1:Aw8dCMJ7RioblQeTqt88akK31OvO8Dhf5JflhBbQEHo=
github.com/dsnet/golib v0.0.0-20171103203638-1ea166775780/go.mod h1:Lj+Z9rebOhdfkVLjJ8T6VcRQv3SXugXy999NBtR9aFY=
github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA=
github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM=
github.com/klauspost/compress v1.4.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A=
github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek=
github.com/ulikunitz/xz v0.5.6/go.mod h1:2bypXElzHzzJZwzH67Y6wb67pO62Rzfn7BSiF4ABRW8=
github.com/ulikunitz/xz v0.5.12 h1:37Nm15o69RwBkXM0J6A5OlE67RZTfzUxTj8fB3dfcsc=
github.com/ulikunitz/xz v0.5.12/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14=
golang.org/x/sys v0.4.0 h1:Zr2JFtRQNX3BCZ8YtxRE9hNJYC8J6I1MVbMg6owUp18=
golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
Loading

0 comments on commit b7b040c

Please sign in to comment.