Skip to content

Commit

Permalink
Merge pull request #12 from Shock-Link/feature/github-ci
Browse files Browse the repository at this point in the history
Add master/develop Github CI
  • Loading branch information
redmushie authored Sep 23, 2023
2 parents 935c174 + 50c2ad7 commit 74480ef
Show file tree
Hide file tree
Showing 6 changed files with 313 additions and 2 deletions.
12 changes: 10 additions & 2 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,15 @@

version: 2
updates:
- package-ecosystem: "nuget" # See documentation for possible values
directory: "/" # Location of package manifests

# Check for Github Actions version updates (for CI/CD)
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "daily"

# Check for Nuget package updates
- package-ecosystem: "nuget"
directory: "/"
schedule:
interval: "daily"
119 changes: 119 additions & 0 deletions .github/workflows/ci-develop.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
on:
push:
branches:
- develop
pull_request:
branches:
- develop
types: [opened, reopened, synchronize]

name: ci-develop

env:
BRANCH: develop
DOTNET_VERSION: 7.0.x
REGISTRY: ghcr.io
IMAGE_NAME: ${{ github.repository_owner }}/shocklink-api

jobs:

build-api:
runs-on: ubuntu-latest

steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup .NET SDK ${{ env.DOTNET_VERSION }}
uses: actions/setup-dotnet@v3
with:
dotnet-version: ${{ env.DOTNET_VERSION }}

- name: Install dependencies
run: dotnet restore

- name: Build
run: dotnet build --configuration Release --no-restore

- name: Test
run: dotnet test --no-restore --verbosity normal

- name: Dotnet Publish
run: dotnet publish API/API.csproj -c Release -o ./publish

- name: Upload full artifacts
uses: actions/upload-artifact@v3
with:
name: full-dotnet-app
path: publish/*
retention-days: 1
if-no-files-found: error

- name: Upload internal artifacts
uses: actions/upload-artifact@v3
with:
name: only-shocklink-dlls
path: publish/ShockLink.*.dll
retention-days: 1
if-no-files-found: error

build-container:
runs-on: ubuntu-latest
needs: build-api

steps:
- name: Checkout
uses: actions/checkout@v4
with:
sparse-checkout: |
Dockerfile
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Download artifacts
uses: actions/download-artifact@v3
with:
name: full-dotnet-app
path: publish/

- name: Log in to Container Registry
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Extract metadata (tags, labels) for Docker
id: meta
uses: docker/metadata-action@v5
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
tags: |
type=raw,value={{branch}},enable=${{ github.ref_name == env.BRANCH }}
type=ref,event=branch
type=ref,event=pr
- name: Build and push
uses: docker/build-push-action@v5
with:
context: .
push: ${{ github.event_name != 'pull_request' }}
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}

# publish:
# runs-on: ubuntu-latest
# needs: build

# steps:
# - name: Download release notes
# uses: actions/checkout@v4
# with:
# sparse-checkout: |
# RELEASE.md

# - name: Download artifacts
# uses: actions/download-artifact@v3
# with:
# name: artifacts
119 changes: 119 additions & 0 deletions .github/workflows/ci-master.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
on:
push:
branches:
- master
pull_request:
branches:
- master
types: [opened, reopened, synchronize]

name: ci-master

env:
BRANCH: master
DOTNET_VERSION: 7.0.x
REGISTRY: ghcr.io
IMAGE_NAME: ${{ github.repository_owner }}/shocklink-api

jobs:

build-api:
runs-on: ubuntu-latest

steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup .NET SDK ${{ env.DOTNET_VERSION }}
uses: actions/setup-dotnet@v3
with:
dotnet-version: ${{ env.DOTNET_VERSION }}

- name: Install dependencies
run: dotnet restore

- name: Build
run: dotnet build --configuration Release --no-restore

- name: Test
run: dotnet test --no-restore --verbosity normal

- name: Dotnet Publish
run: dotnet publish API/API.csproj -c Release -o ./publish

- name: Upload full artifacts
uses: actions/upload-artifact@v3
with:
name: full-dotnet-app
path: publish/*
retention-days: 1
if-no-files-found: error

- name: Upload internal artifacts
uses: actions/upload-artifact@v3
with:
name: only-shocklink-dlls
path: publish/ShockLink.*.dll
retention-days: 1
if-no-files-found: error

build-container:
runs-on: ubuntu-latest
needs: build-api

steps:
- name: Checkout
uses: actions/checkout@v4
with:
sparse-checkout: |
Dockerfile
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Download artifacts
uses: actions/download-artifact@v3
with:
name: full-dotnet-app
path: publish/

- name: Log in to Container Registry
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Extract metadata (tags, labels) for Docker
id: meta
uses: docker/metadata-action@v5
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
tags: |
type=raw,value={{branch}},enable=${{ github.ref_name == env.BRANCH }}
type=ref,event=branch
type=ref,event=pr
- name: Build and push
uses: docker/build-push-action@v5
with:
context: .
push: ${{ github.event_name != 'pull_request' }}
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}

# publish:
# runs-on: ubuntu-latest
# needs: build

# steps:
# - name: Download release notes
# uses: actions/checkout@v4
# with:
# sparse-checkout: |
# RELEASE.md

# - name: Download artifacts
# uses: actions/download-artifact@v3
# with:
# name: artifacts
4 changes: 4 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
FROM mcr.microsoft.com/dotnet/aspnet:7.0-alpine
WORKDIR /app
COPY publish .
ENTRYPOINT ["dotnet", "ShockLink.API.dll"]
28 changes: 28 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# ShockLink API


# Deployment

The ShockLink stack consists of the following components:
- Postgres as database
- Redis
- The API (this repository)
- [The WebUI](https://github.com/Shock-Link/WebUI)

## Using Docker

Assuming you have all other required containers running (if not, see above), you can run the following command to start the API:

```bash
docker run \
ghcr.io/shock-link/shocklink-api:latest \
--name shocklink-api \
-e FRONTEND_BASE_URL=localhost \
-e DB=localhost \
-e REDIS_HOST=localhost \
-p 80:80/tcp
```

## Using `docker-compose`

See [docker-compose.yml](docker-compose.yml).
33 changes: 33 additions & 0 deletions docker-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
# This file is a minimal example of a runnable ShockLink stack.

version: '3.9'

services:

db:
image: postgres:16
container_name: shocklink-pg
environment:
- POSTGRES_PASSWORD=postgres

redis:
image: redislabs/redisearch:latest

api:
image: ghcr.io/shock-link/shocklink-api:latest
depends_on:
- db
- redis
ports:
- "5001:80/tcp"
environment:
- FRONTEND_BASE_URL=localhost
- REDIS_HOST=redis
- DB=db

webui:
image: ghcr.io/shock-link/shocklink-webui:latest
depends_on:
- api
ports:
- "5002:80/tcp"

0 comments on commit 74480ef

Please sign in to comment.