22 Commits

Author SHA1 Message Date
85e4837ef9 Changed build_arg to single string pulled from secrets
All checks were successful
ci/woodpecker/tag/web_uploadimage Pipeline was successful
2024-04-04 21:38:21 -05:00
61ea66aad2 Updated build_args to pull from_secret 2024-04-04 21:36:53 -05:00
30e8761fa3 Change build_args reference
Some checks failed
ci/woodpecker/tag/web_uploadimage Pipeline failed
2024-04-04 21:31:46 -05:00
862fd58368 Escaped DEV_AUTH0_AUDIENCE 2024-04-04 21:30:22 -05:00
455b756bc1 Moved secrets property to bottom
Some checks failed
ci/woodpecker/tag/web_uploadimage Pipeline failed
2024-04-04 21:29:09 -05:00
b96a40e6ed Escaped build args 2024-04-04 21:17:16 -05:00
8dd5a798d9 Changed build_args format
Some checks failed
ci/woodpecker/tag/web_uploadimage Pipeline failed
2024-04-04 21:15:47 -05:00
1ddad9171e Stored entire key-value pair for build args in secrets
Some checks failed
ci/woodpecker/tag/web_uploadimage Pipeline failed
2024-04-04 21:14:21 -05:00
0d5192c156 Changed how build args are passed
Some checks failed
ci/woodpecker/tag/web_uploadimage Pipeline failed
2024-04-04 21:09:53 -05:00
c9689fd114 Removed server_name
All checks were successful
ci/woodpecker/tag/web_uploadimage Pipeline was successful
2024-04-03 23:15:25 -05:00
7ad384fb63 Updated nginx.conf
All checks were successful
ci/woodpecker/tag/web_uploadimage Pipeline was successful
2024-04-03 23:07:35 -05:00
f6578860ab Fixed issue with filtering for yaba-web
All checks were successful
ci/woodpecker/tag/web_uploadimage Pipeline was successful
2024-04-03 21:36:42 -05:00
cf8abed1e2 Added missing latest tag
All checks were successful
ci/woodpecker/tag/api_build Pipeline was successful
ci/woodpecker/tag/api_uploadimage Pipeline was successful
ci/woodpecker/tag/web_uploadimage Pipeline was successful
2024-04-03 21:23:18 -05:00
15f5e43e34 Modified how buildargs are passed
All checks were successful
ci/woodpecker/tag/web_uploadimage Pipeline was successful
2024-04-01 23:24:14 -05:00
6634891de6 Modified how buildargs are passed
Some checks failed
ci/woodpecker/tag/web_uploadimage Pipeline failed
2024-04-01 23:16:12 -05:00
98fc970653 Wrong reference to ref/tags
Some checks failed
ci/woodpecker/tag/api_build Pipeline was successful
ci/woodpecker/tag/api_uploadimage Pipeline was successful
ci/woodpecker/tag/web_uploadimage Pipeline failed
2024-04-01 23:06:27 -05:00
f71211c0b9 Fixed wrong reference to ref, add force remove of file 2024-04-01 22:56:25 -05:00
19fab91db9 Removed skipped clone, fixed wrong syntax for conditional filtering
Some checks failed
ci/woodpecker/tag/web_uploadimage Pipeline failed
ci/woodpecker/tag/api_build Pipeline was successful
ci/woodpecker/tag/api_uploadimage Pipeline failed
2024-04-01 22:52:21 -05:00
8b9a837062 Fixed missing image on versionising prod docker image
Some checks failed
ci/woodpecker/tag/api_build Pipeline failed
ci/woodpecker/tag/api_uploadimage unknown status
ci/woodpecker/tag/web_uploadimage Pipeline failed
2024-04-01 22:42:08 -05:00
be1344e9e5 Add buildargs to web docker build 2024-04-01 22:35:48 -05:00
fc51e2eda9 Modified structure for Woodpecker config 2024-04-01 22:05:10 -05:00
456b8ef75b Created Woodpecker CI/CD deployment
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
- Created Dockerfile for packing up API and Web projects as Docker image
2024-03-30 22:54:16 -05:00
145 changed files with 30953 additions and 18248 deletions

2
.gitignore vendored
View File

@ -248,3 +248,5 @@ yarn-debug.log*
yarn-error.log*
.env
Logs/*
docker-compose.yml
*exclude*

View File

@ -0,0 +1,12 @@
when:
- event: [push, pull_request, tag]
ref: [refs/tags/APIDEV-*, refs/tags/API-*, refs/heads/api/*]
steps:
- name: (YABA.API) Build and run tests
when:
- event: [push, pull_request, tag]
branch: [api/*]
image: mcr.microsoft.com/dotnet/sdk:6.0
commands:
- dotnet build ./API
- dotnet test ./API

View File

@ -0,0 +1,34 @@
when:
- event: tag
ref: [refs/tags/APIDEV-*, refs/tags/API-*]
steps:
- name: (YABA.API) Determining Docker image version number (dev)
when:
- ref: refs/tags/APIDEV-*
image: alpine:latest
commands:
- rm -f tags.txt
- echo ${CI_COMMIT_TAG} | sed -e "s/^APIDEV-//" >> tags.txt
- echo "latest-dev" >> tags.txt
- name: (YABA.API) Determining Docker image version number (prod)
image: alpine:latest
when:
- ref: refs/tags/API-*
commands:
- rm -f tags.txt
- echo ${CI_COMMIT_TAG} | sed -e "s/^API-//" >> tags.txt
- echo "latest" >> tags.txt
- name: (YABA.API) Package and Upload Docker Image
image: woodpeckerci/plugin-docker-buildx
settings:
repo: gitea.iwanaga.moe/cjtibule/yaba/api
context: ./API
dockerfile: ./API/YABA.API/Dockerfile
tags_file: tags.txt
username:
from_secret: gitea_yaba_registry_username
password:
from_secret: gitea_yaba_registry_password
registry: gitea.iwanaga.moe
depends_on:
- api_build

View File

@ -0,0 +1,34 @@
when:
- event: tag
ref: [refs/tags/WEBDEV-*, refs/tags/WEB-*]
steps:
- name: (YABA.Web) Determining Docker image version number (dev)
when:
- ref: refs/tags/WEBDEV-*
image: alpine:latest
commands:
- rm -f tags.txt
- echo ${CI_COMMIT_TAG} | sed -e "s/^WEBDEV-//" >> tags.txt
- echo "latest-dev" >> tags.txt
- name: (YABA.Web) Determining Docker image version number (prod)
when:
- ref: refs/tags/WEB-*
image: alpine:latest
commands:
- rm -f tags.txt
- echo ${CI_COMMIT_TAG} | sed -e "s/^WEB-//" >> tags.txt
- echo "latest" >> tags.txt
- name: (YABA.Web) Package and Upload Docker Image
image: woodpeckerci/plugin-docker-buildx
settings:
repo: gitea.iwanaga.moe/cjtibule/yaba/web
context: ./Web
dockerfile: ./Web/Dockerfile
tags_file: tags.txt
username:
from_secret: gitea_yaba_registry_username
password:
from_secret: gitea_yaba_registry_password
registry: gitea.iwanaga.moe
build_args:
from_secret: DEV1_BUILDARGS

63
API/Readme.md Normal file
View File

@ -0,0 +1,63 @@
# YABA: Yet Another Bookmark App
## YABA.API - Developer Guide
### Running Migrations
When running migrations, .NET seems to be ignoring dependency injection settings. In order to get around this, be sure to add the connection string to the command like. For example, when adding the migration:
```
dotnet ef migrations add InitialMigration -p YABA.Data -s YABA.API --context YABABaseContext -- {CONNECTION_STRING_HERE}
```
When removing last migration:
```
dotnet ef migrations remove InitialMigration -p YABA.Data -s YABA.API --context YABABaseContext -- {CONNECTION_STRING_HERE}
```
When applying migrations:
```
dotnet ef database update -p YABA.Data -s YABA.API -c YABABaseContext -- { CONNECTION_STRING_HERE }
```
As per the documentation [on MSDN](https://learn.microsoft.com/en-ca/ef/core/cli/dbcontext-creation?tabs=dotnet-core-cli#from-application-services):
> The -- token directs dotnet ef to treat everything that follows as an argument and not try to parse them as options. Any extra arguments not used by dotnet ef are forwarded to the app.
### Managing secrets
Best practice dictates that sensitive values should never be committed to source control. To manage secrets locally, this project utilize the [secrets manager](https://learn.microsoft.com/en-us/aspnet/core/security/app-secrets?view=aspnetcore-7.0&tabs=windows).
To initialize a secrets manager:
```
dotnet user-secrets init --project YABA.API
```
To set (or override) the value of a secret using a provided key:
```
dotnet user-secrets set "Key" "Value" --project YABA.API
```
```
dotnet user-secrets set "Object:Property" "Value" --project YABA.API
```
To list all secets:
```
dotnet user-secrets list --project YABA.API
```
### Docker
To build a dockerized version of the API project:
```
docker build { API_PROJECT_ROOT_SOURCE } -f { API_PROJECT_DOCKERFILE_PATH } -t { imagename:tag }
```
In order to run a container using the image built above, keep the following things in mind:
- It might be necessary to map container port 80 to another
- In the absence of a linked user secrets, secrets will have to be passed in to the container as environment variables, prefixed with `ASPNETCORE_`
```
docker run -d -p { HOST_PC_PORT_HERE }:80 --env ASPNETCORE_Object__Property=Value --name { CONTAINER_NAME } {imagename:tag}
```
Environment variables that are explicitly listed in `YABA.API\Dockerfile` will have to be properly set for proper operation of the application

36
API/YABA.API/Dockerfile Normal file
View File

@ -0,0 +1,36 @@
#See https://aka.ms/customizecontainer to learn how to customize your debug container and how Visual Studio uses this Dockerfile to build your images for faster debugging.
FROM mcr.microsoft.com/dotnet/aspnet:6.0-alpine AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
# Set environment variables
ENV ASPNETCORE_Environment=Development
ENV ASPNETCORE_Authentication__Auth0__ClientId=
ENV ASPNETCORE_Authentication__Auth0__ClientSecret=
ENV ASPNETCORE_Authentication__Auth0__Domain=
ENV ASPNETCORE_Authentication__Auth0__Identifier=
ENV ASPNETCORE_ConnectionStrings__YABAReadOnlyDbConnectionString=
ENV ASPNETCORE_ConnectionStrings__YABAReadWriteDbConnectionString=
ENV ASPNETCORE_WebClient__Url=
FROM mcr.microsoft.com/dotnet/sdk:6.0-alpine AS build
WORKDIR /src
COPY ["YABA.API/YABA.API.csproj", "YABA.API/"]
COPY ["YABA.Common/YABA.Common.csproj", "YABA.Common/"]
COPY ["YABA.Data/YABA.Data.csproj", "YABA.Data/"]
COPY ["YABA.Models/YABA.Models.csproj", "YABA.Models/"]
COPY ["YABA.Service/YABA.Service.csproj", "YABA.Service/"]
RUN dotnet restore "YABA.API/YABA.API.csproj"
COPY . .
WORKDIR "/src/YABA.API"
RUN dotnet build "YABA.API.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "YABA.API.csproj" -c Release -o /app/publish /p:UseAppHost=false
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "YABA.API.dll"]

View File

@ -16,6 +16,8 @@ using Serilog;
using Microsoft.AspNetCore.HttpOverrides;
var builder = WebApplication.CreateBuilder(args);
builder.Configuration.AddEnvironmentVariables();
var configuration = builder.Configuration;
// Add services to the container.
@ -118,13 +120,8 @@ app.MapControllers();
app.UseMiddleware<AddCustomClaimsMiddleware>();
app.UseMiddleware<AddCustomLoggingPropertiesMiddleware>();
app.UseCors(x => x
.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader());
var webClientUrl = configuration.GetSection("WebClient").GetValue<string>("Url");
app.UseCors(x => x.AllowAnyHeader().AllowAnyMethod().WithOrigins(webClientUrl));
app.UseCors(x => x.WithOrigins(webClientUrl).AllowAnyMethod().AllowAnyHeader());
app.MapHealthChecks("/Pulse");
app.Run();

View File

@ -41,6 +41,6 @@
"Enrich": ["FromLogContext", "WithMachineName", "WithProcessId", "WithThreadId"]
},
"WebClient": {
"Url": "https://localhost:3000"
"Url": "http://localhost:3000"
}
}

View File

@ -1,23 +1,7 @@
# YABA: Yet Another Bookmark App
## Developer Guides
## Developer Guide
### Running Migrations
When running migrations, .NET seems to be ignoring dependency injection settings. In order to get around this, be sure to add the connection string to the command like. For example, when adding the migration:
```
dotnet ef migrations add InitialMigration -p YABA.Data -s YABA.API --context YABABaseContext -- {CONNECTION_STRING_HERE}
```
When removing last migration:
```
dotnet ef migrations remove InitialMigration -p YABA.Data -s YABA.API --context YABABaseContext -- {CONNECTION_STRING_HERE}
```
When applying migrations:
```
dotnet ef database update -p YABA.Data -s YABA.API -c YABABaseContext -- { CONNECTION_STRING_HERE }
```
As per the documentation [on MSDN](https://learn.microsoft.com/en-ca/ef/core/cli/dbcontext-creation?tabs=dotnet-core-cli#from-application-services):
> The -- token directs dotnet ef to treat everything that follows as an argument and not try to parse them as options. Any extra arguments not used by dotnet ef are forwarded to the app.
The application is divided into two parts. Refer to the Readme on the root of the following sections for more information:
- API: [Readme](API/Readme.md)
- Web: [Readme](Web/Readme.md)

1
Web/.dockerignore Normal file
View File

@ -0,0 +1 @@
node_modules/

22
Web/Dockerfile Normal file
View File

@ -0,0 +1,22 @@
FROM node:17-alpine as builder
# Set the environment variables
ARG REACT_APP_API_BASE_URL
ARG REACT_APP_AUTH0_DOMAIN
ARG REACT_APP_AUTH0_CLIENT_ID
ARG REACT_APP_AUTH0_CALLBACK_URL
ARG REACT_APP_AUTH0_AUDIENCE
WORKDIR /app
COPY package.json .
RUN npm install
COPY . .
RUN npm run build
FROM nginx:mainline-alpine
WORKDIR /usr/share/nginx/html
RUN rm -rf ./*
COPY --from=builder /app/build .
COPY nginx.conf /etc/nginx/conf.d/default.conf
EXPOSE 80
ENTRYPOINT ["nginx", "-g", "daemon off;"]

View File

@ -68,3 +68,17 @@ This section has moved here: [https://facebook.github.io/create-react-app/docs/d
### `npm run build` fails to minify
This section has moved here: [https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify](https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify)
---
## Docker
To build a dockerized version of the Web project:
```
docker build { WEB_PROJECT_ROOT_SOURCE } -f { WEB_PROJECT_DOCKERFILE_PATH } -t { imagename:tag }
```
In order to run a container using the image built above, keep the following things in mind:
- It might be necessary to map container port 80 to another
- Environment variables actively used by the web app can be overriden when starting uip a container. They are prefixed with: `REACT_APP`
- Environment variables that are explicitly listed in `Web\Dockerfile` will have to be properly set for proper operation of the application

8
Web/nginx.conf Normal file
View File

@ -0,0 +1,8 @@
server {
listen 80;
root /usr/share/nginx/html;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
}

30717
Web/package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

View File

@ -2,6 +2,7 @@
"name": "yaba-web",
"version": "0.1.0",
"private": true,
"homepage": ".",
"dependencies": {
"@auth0/auth0-react": "^2.0.0",
"@testing-library/jest-dom": "^5.16.5",

Some files were not shown because too many files have changed in this diff Show More