Automated docker build
This commit is contained in:
parent
f55a5eba96
commit
08871e15b6
3 changed files with 84 additions and 29 deletions
50
.github/workflows/docker.yml
vendored
Normal file
50
.github/workflows/docker.yml
vendored
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
name: Docker Image
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- "master"
|
||||||
|
tags:
|
||||||
|
- "v*"
|
||||||
|
pull_request:
|
||||||
|
branches:
|
||||||
|
- "master"
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
docker_image:
|
||||||
|
name: Build & push docker image to DockerHub
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout repo
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: Docker meta
|
||||||
|
id: meta
|
||||||
|
uses: docker/metadata-action@v4
|
||||||
|
with:
|
||||||
|
images: ${{ secrets.DOCKERHUB_REPO }}
|
||||||
|
tags: |
|
||||||
|
type=semver,pattern={{version}}
|
||||||
|
type=semver,pattern={{major}}.{{minor}}
|
||||||
|
type=semver,pattern={{major}}
|
||||||
|
|
||||||
|
- name: Setup QEMU
|
||||||
|
uses: docker/setup-qemu-action@v2
|
||||||
|
|
||||||
|
- name: Setup Docker Buildx
|
||||||
|
uses: docker/setup-buildx-action@v2
|
||||||
|
|
||||||
|
- name: Login DockerHub
|
||||||
|
if: github.event_name != 'pull_request'
|
||||||
|
uses: docker/login-action@v2
|
||||||
|
with:
|
||||||
|
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||||
|
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||||
|
|
||||||
|
- name: Build & push
|
||||||
|
uses: docker/build-push-action@v3
|
||||||
|
with:
|
||||||
|
platforms: linux/amd64, linux/arm64
|
||||||
|
push: ${{ github.ref_type == 'tag' }}
|
||||||
|
tags: ${{ steps.meta.outputs.tags }}
|
||||||
|
labels: ${{ steps.meta.outputs.labels }}
|
29
Cargo.toml
29
Cargo.toml
|
@ -1,7 +1,7 @@
|
||||||
[package]
|
[package]
|
||||||
name="microbin"
|
name = "microbin"
|
||||||
version="1.1.0"
|
version = "1.1.0"
|
||||||
edition="2021"
|
edition = "2021"
|
||||||
authors = ["Daniel Szabo <daniel.szabo99@outlook.com>"]
|
authors = ["Daniel Szabo <daniel.szabo99@outlook.com>"]
|
||||||
license = "BSD-3-Clause"
|
license = "BSD-3-Clause"
|
||||||
description = "Simple, performant, configurable, entirely self-contained Pastebin and URL shortener."
|
description = "Simple, performant, configurable, entirely self-contained Pastebin and URL shortener."
|
||||||
|
@ -11,20 +11,18 @@ repository = "https://github.com/szabodanika/microbin"
|
||||||
keywords = ["pastebin", "pastabin", "microbin", "actix", "selfhosted"]
|
keywords = ["pastebin", "pastabin", "microbin", "actix", "selfhosted"]
|
||||||
categories = ["pastebins"]
|
categories = ["pastebins"]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
actix-web="4"
|
actix-web = "4"
|
||||||
actix-files="0.6.0"
|
actix-files = "0.6.0"
|
||||||
serde={ version = "1.0", features = ["derive"] }
|
serde = { version = "1.0", features = ["derive"] }
|
||||||
serde_json = "1.0.80"
|
serde_json = "1.0.80"
|
||||||
bytesize = { version = "1.1", features = ["serde"] }
|
bytesize = { version = "1.1", features = ["serde"] }
|
||||||
askama="0.10"
|
askama = "0.10"
|
||||||
askama-filters={ version = "0.1.3", features = ["chrono"] }
|
askama-filters = { version = "0.1.3", features = ["chrono"] }
|
||||||
chrono="0.4.19"
|
chrono = "0.4.19"
|
||||||
rand="0.8.5"
|
rand = "0.8.5"
|
||||||
linkify="0.8.1"
|
linkify = "0.8.1"
|
||||||
clap={ version = "3.1.12", features = ["derive", "env"] }
|
clap = { version = "3.1.12", features = ["derive", "env"] }
|
||||||
actix-multipart = "0.4.0"
|
actix-multipart = "0.4.0"
|
||||||
futures = "0.3"
|
futures = "0.3"
|
||||||
sanitize-filename = "0.3.0"
|
sanitize-filename = "0.3.0"
|
||||||
|
@ -34,3 +32,6 @@ actix-web-httpauth = "0.6.0"
|
||||||
lazy_static = "1.4.0"
|
lazy_static = "1.4.0"
|
||||||
syntect = "5.0"
|
syntect = "5.0"
|
||||||
|
|
||||||
|
[profile.release]
|
||||||
|
lto = true
|
||||||
|
strip = true
|
||||||
|
|
34
Dockerfile
34
Dockerfile
|
@ -1,23 +1,27 @@
|
||||||
# latest rust will be used to build the binary
|
FROM rust:latest as build
|
||||||
FROM rust:latest as builder
|
|
||||||
|
|
||||||
# the temporary directory where we build
|
WORKDIR /app
|
||||||
WORKDIR /usr/src/microbin
|
|
||||||
|
|
||||||
# copy sources to /usr/src/microbin on the temporary container
|
|
||||||
COPY . .
|
COPY . .
|
||||||
|
|
||||||
# run release build
|
RUN \
|
||||||
RUN cargo build --release
|
DEBIAN_FRONTEND=noninteractive \
|
||||||
|
apt-get update &&\
|
||||||
|
apt-get -y install ca-certificates tzdata &&\
|
||||||
|
cargo build --release
|
||||||
|
|
||||||
# create final container using slim version of debian
|
FROM debian:bullseye-slim
|
||||||
FROM debian:buster-slim
|
|
||||||
|
|
||||||
# microbin will be in /usr/local/bin/microbin/
|
WORKDIR /app
|
||||||
WORKDIR /usr/local/bin
|
|
||||||
|
|
||||||
# copy built exacutable
|
COPY --from=build \
|
||||||
COPY --from=builder /usr/src/microbin/target/release/microbin /usr/local/bin/microbin
|
/usr/share/zoneinfo \
|
||||||
|
/usr/share/zoneinfo
|
||||||
|
COPY --from=build \
|
||||||
|
/etc/ssl/certs/ca-certificates.crt \
|
||||||
|
/etc/ssl/certs/ca-certificates.crt
|
||||||
|
COPY --from=build \
|
||||||
|
/app/target/release/microbin \
|
||||||
|
/usr/bin/microbin
|
||||||
|
|
||||||
# run the binary
|
ENTRYPOINT ["microbin"]
|
||||||
CMD ["microbin"]
|
|
Loading…
Reference in a new issue