Compare commits
5 Commits
v3.0.4
...
53bd0e107e
| Author | SHA1 | Date | |
|---|---|---|---|
| 53bd0e107e | |||
| c85a6ec46f | |||
| 6b6a1bce7e | |||
| 2634daf800 | |||
| eeb6e5de6a |
1
.gitattributes
vendored
1
.gitattributes
vendored
@@ -1 +0,0 @@
|
||||
*.png filter=lfs diff=lfs merge=lfs -text
|
||||
65
.gitea/workflows/ci.yml
Normal file
65
.gitea/workflows/ci.yml
Normal file
@@ -0,0 +1,65 @@
|
||||
name: Portfolio CI/CD
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ "*" ]
|
||||
tags: [ "*" ]
|
||||
pull_request:
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Setup .NET
|
||||
uses: actions/setup-dotnet@v4
|
||||
with:
|
||||
dotnet-version: '10.x'
|
||||
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Install dependencies
|
||||
run: dotnet restore
|
||||
|
||||
- name: Build Projects
|
||||
run: dotnet build --configuration Release --no-restore
|
||||
|
||||
test:
|
||||
runs-on: ubuntu-latest
|
||||
needs: build
|
||||
steps:
|
||||
- name: Setup .NET
|
||||
uses: actions/setup-dotnet@v4
|
||||
with:
|
||||
dotnet-version: '10.x'
|
||||
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Test
|
||||
run: dotnet test --verbosity normal
|
||||
|
||||
publish:
|
||||
runs-on: ubuntu-latest
|
||||
needs: build
|
||||
if: startsWith(github.ref, 'refs/tags/')
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Login to registry
|
||||
run: |
|
||||
echo "${{ secrets.REGISTRY_PASSWORD }}" | docker login git.leon-hoppe.de \
|
||||
-u leon.hoppe --password-stdin
|
||||
|
||||
- name: Build backend image
|
||||
run: docker build -t git.leon-hoppe.de/leon.hoppe/portfolio/backend:latest -f src/Portfolio.Api/Dockerfile .
|
||||
|
||||
- name: Build frontend image
|
||||
run: docker build -t git.leon-hoppe.de/leon.hoppe/portfolio/frontend:latest -f src/Portfolio.Web/Dockerfile .
|
||||
|
||||
- name: Push backend image
|
||||
run: docker push git.leon-hoppe.de/leon.hoppe/portfolio/backend:latest
|
||||
|
||||
- name: Push frontend image
|
||||
run: docker push git.leon-hoppe.de/leon.hoppe/portfolio/frontend:latest
|
||||
@@ -1,44 +0,0 @@
|
||||
stages:
|
||||
- build
|
||||
- test
|
||||
- publish
|
||||
|
||||
variables:
|
||||
DOCKER_IMAGE: registry.leon-hoppe.de/leon.hoppe/portfolio
|
||||
|
||||
build:
|
||||
stage: build
|
||||
image: mcr.microsoft.com/dotnet/sdk:10.0
|
||||
script:
|
||||
- dotnet restore
|
||||
- dotnet build --configuration Release --no-restore
|
||||
artifacts:
|
||||
paths:
|
||||
- "**/bin/Release"
|
||||
expire_in: 10 minutes
|
||||
|
||||
test:
|
||||
stage: test
|
||||
image: mcr.microsoft.com/dotnet/sdk:10.0
|
||||
script:
|
||||
- dotnet test --verbosity normal
|
||||
dependencies:
|
||||
- build
|
||||
|
||||
publish:
|
||||
stage: publish
|
||||
tags:
|
||||
- docker
|
||||
before_script:
|
||||
- git lfs pull
|
||||
script:
|
||||
- export VERSION=$(echo $CI_COMMIT_TAG | sed 's/^v//')
|
||||
- echo "$CI_REGISTRY_PASSWORD" | docker login -u "$CI_REGISTRY_USER" --password-stdin registry.leon-hoppe.de
|
||||
- docker build -t $DOCKER_IMAGE/api:$VERSION -t $DOCKER_IMAGE/api:latest -f src/Portfolio.Api/Dockerfile .
|
||||
- docker build -t $DOCKER_IMAGE/web:$VERSION -t $DOCKER_IMAGE/web:latest -f src/Portfolio.Web/Dockerfile .
|
||||
- docker push $DOCKER_IMAGE/api:$VERSION
|
||||
- docker push $DOCKER_IMAGE/web:$VERSION
|
||||
- docker push $DOCKER_IMAGE/api:latest
|
||||
- docker push $DOCKER_IMAGE/web:latest
|
||||
only:
|
||||
- tags
|
||||
@@ -10,7 +10,7 @@ internal sealed class TimelineRepository(IHttpClientFactory factory) : ITimeline
|
||||
if (!result.IsSuccessStatusCode) return [];
|
||||
|
||||
var data = await result.Content.ReadFromJsonAsync<IEnumerable<TimelineEntry>>(ct);
|
||||
return data ?? [];
|
||||
return data?.OrderBy(t => t.Date) ?? Enumerable.Empty<TimelineEntry>();
|
||||
}
|
||||
|
||||
public async Task<IEnumerable<TimelineEntry>> GetFeaturedTimeline(CancellationToken ct) {
|
||||
@@ -19,6 +19,6 @@ internal sealed class TimelineRepository(IHttpClientFactory factory) : ITimeline
|
||||
if (!result.IsSuccessStatusCode) return [];
|
||||
|
||||
var data = await result.Content.ReadFromJsonAsync<IEnumerable<TimelineEntry>>(ct);
|
||||
return data ?? [];
|
||||
return data?.OrderBy(t => t.Date) ?? Enumerable.Empty<TimelineEntry>();
|
||||
}
|
||||
}
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 128 B After Width: | Height: | Size: 591 B |
Binary file not shown.
|
Before Width: | Height: | Size: 129 B After Width: | Height: | Size: 1.7 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 129 B After Width: | Height: | Size: 1.4 KiB |
Reference in New Issue
Block a user