diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..6214ffa --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,55 @@ +name: instances.invidio.us CI + +on: + push: + branches: + - "master" + pull_request: + branches: "*" + +jobs: + build: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + + - name: Install Crystal + uses: oprypin/install-crystal@v1.3.0 + + - name: Cache Shards + uses: actions/cache@v2 + with: + path: ./lib + key: shards-${{ hashFiles('shard.lock') }} + + - name: Install Shards + run: | + if ! shards check; then + shards install + fi + + - name: Run lint + run: | + if ! crystal tool format --check; then + crystal tool format + git diff + exit 1 + fi + + - name: Build + run: crystal build --warnings all --error-on-warnings --error-trace src/instances.cr + + build-docker: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + + - name: Build Docker + run: docker-compose up -d + + - name: Test Docker + run: while curl -Isf http://localhost:3000; do sleep 1; done diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..b4c3c5a --- /dev/null +++ b/Dockerfile @@ -0,0 +1,18 @@ +FROM crystallang/crystal:0.35.1-alpine AS builder +WORKDIR /app +COPY ./shard.yml ./shard.yml +RUN shards install +COPY ./src/ ./src/ +RUN crystal build ./src/instances.cr --release + +FROM alpine:latest +RUN apk add --no-cache gc pcre libgcc +WORKDIR /app +RUN addgroup -g 1000 -S invidious && \ + adduser -u 1000 -S invidious -G invidious +COPY ./assets/ ./assets/ +COPY --from=builder /app/instances . + +EXPOSE 3000 +USER invidious +CMD ["/app/instances"] diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..83e664a --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,7 @@ +version: '3' +services: + instances: + build: . + restart: unless-stopped + ports: + - "127.0.0.1:3000:3000"