Automated docker build

This commit is contained in:
Arghyadip Chakraborty 2022-08-25 22:25:03 +05:30
parent f55a5eba96
commit 08871e15b6
3 changed files with 84 additions and 29 deletions

50
.github/workflows/docker.yml vendored Normal file
View 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 }}

View file

@ -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

View file

@ -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"]