diff --git a/.gitea/workflows/build-oci.yaml b/.gitea/workflows/build-oci.yaml new file mode 100644 index 0000000..66619c3 --- /dev/null +++ b/.gitea/workflows/build-oci.yaml @@ -0,0 +1,47 @@ +name: Container Build & Push + +# add on pull requests too +on: + push: + branches: + - master + +jobs: + build: + runs-on: ubuntu-latest + container: + image: catthehacker/ubuntu:act-latest + env: + REGISTRY: gitgud.foo + OWNER: thegrind + TAG: 1.0.0 + IMAGE_NAME: test + steps: + - + name: Check out code + uses: actions/checkout@v3 + - name: whereami + run: ls -lath + + - + name: get dicks space + run: | + df -h + + - + name: Log in to the GitGud container registry + run: | + /usr/bin/docker login $REGISTRY \ + -u "${{ gitea.actor }}" \ + -p "${{ secrets.REGISTRY_PASSWORD }}" + + - + name: Build and push OCI image + run: | + IMAGE=$REGISTRY/$OWNER/$IMAGE_NAME:$TAG + docker build -f Dockerfile.builder -t $IMAGE . + - + name: Push OCI image + run: | + IMAGE=$REGISTRY/$OWNER/$IMAGE_NAME:$TAG + docker push $IMAGE \ No newline at end of file diff --git a/.gitignore b/.gitignore index 74fd59d..c07fc8f 100644 --- a/.gitignore +++ b/.gitignore @@ -5,4 +5,6 @@ output.opus .env *.wav *.opus -*.webm \ No newline at end of file +*.webm +*.tar.gz +*.old \ No newline at end of file diff --git a/Dockerfile.builder b/Dockerfile.builder new file mode 100644 index 0000000..49a6862 --- /dev/null +++ b/Dockerfile.builder @@ -0,0 +1,78 @@ +# Use the official golang:1.22.12-bookworm image as the build stage +FROM golang:1.22.12-bookworm + +# Create a directory /app +RUN mkdir /app + +# Set the working directory to /app +WORKDIR /app + +# Copy the current directory contents into /app +COPY ./ /app/ + +# Update the package list and install necessary packages +RUN apt-get update && apt-get install -y --no-install-recommends \ + curl \ + wget \ + vim \ + git \ + debconf \ + ca-certificates \ + tar \ + autoconf \ + automake \ + build-essential \ + cmake \ + git-core \ + libass-dev \ + libfreetype6-dev \ + libgnutls28-dev \ + libmp3lame-dev \ + libsdl2-dev \ + libtool \ + libva-dev \ + libvdpau-dev \ + libvorbis-dev \ + libxcb1-dev \ + libxcb-shm0-dev \ + libxcb-xfixes0-dev \ + meson \ + ninja-build \ + pkg-config \ + texinfo \ + yasm \ + zlib1g-dev \ + libx264-dev \ + libx265-dev \ + libnuma-dev \ + libvpx-dev \ + libopus-dev \ + libunistring-dev \ + libaom-dev \ + libdav1d-dev && \ + # Download Go module dependencies + go mod download && \ + # Download yt-dlp + wget --no-check-certificate -c https://github.com/yt-dlp/yt-dlp/releases/download/2025.01.26/yt-dlp_linux &&\ + # Download ffmpeg + wget --no-check-certificate -c https://www.johnvansickle.com/ffmpeg/old-releases/ffmpeg-6.0.1-amd64-static.tar.xz &&\ + # Move yt-dlp to /usr/bin and set permissions + mv yt-dlp_linux /usr/bin/yt-dlp && \ + chmod 755 /usr/bin/yt-dlp && \ + chmod +x /usr/bin/yt-dlp && \ + # Extract ffmpeg tarball + tar -xf ffmpeg-6.0.1-amd64-static.tar.xz && \ + # Remove the tarball + rm -rf ffmpeg-6.0.1-amd64-static.tar.xz && \ + # Set execute permissions for ffmpeg and ffprobe + chmod +x ffmpeg-6.0.1-amd64-static/ffmpeg && \ + chmod +x ffmpeg-6.0.1-amd64-static/ffprobe && \ + # Copy ffmpeg and ffprobe to /usr/bin + cp -R ffmpeg-6.0.1-amd64-static/ffmpeg /usr/bin/ && \ + cp -R ffmpeg-6.0.1-amd64-static/ffprobe /usr/bin/ && \ + # Remove the extracted ffmpeg directory + rm -rf ffmpeg-6.0.1-amd64-static && \ + # Create a new user 'papibot' + useradd papibot && \ + # Build the Go application + CGO_ENABLED=0 GOOS=linux go build -o /app/papibot diff --git a/Dockerfile.runtime b/Dockerfile.runtime new file mode 100644 index 0000000..8e66b82 --- /dev/null +++ b/Dockerfile.runtime @@ -0,0 +1,17 @@ +FROM www.gitgud.foo/thegrind/papibot-builder:latest as build + +# Create a group and user 'papibot' +RUN groupadd -r papibot && useradd -r -g papibot papibot + +# Switch to the 'papibot' user +USER papibot + +# Copy the necessary files from the build stage +COPY --from=build --chown=papibot:papibot /usr/bin/ /usr/bin +COPY --from=build --chown=papibot:papibot /app/ /app/ + +# Set the working directory to /app +WORKDIR /app/ + +# Set the entry point to the built Go application +ENTRYPOINT ["./papibot"] \ No newline at end of file diff --git a/README.md b/README.md index 7d1753d..8073012 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,11 @@ Currently in development. + +## docker +docker build -t papibot . ;docker run -d papibot:latest --name papibot + + ## System requirements - `ffmpeg` make sure libopus is included - `yt-dlp` @@ -16,6 +21,11 @@ Populate the discord bot keys type `!` in any channel in the discord while you're in a voice channel. +## Build new builder container image +``` +docker build -t www.gitgud.foo/thegrind/papibot-builder: Dockerfile.builder +``` + ## Running tests locally -`make test` \ No newline at end of file +`make test`