diff --git a/.github/workflows/cypress.yml b/.github/workflows/cypress.yml index 9101bdb60..2dc51179e 100644 --- a/.github/workflows/cypress.yml +++ b/.github/workflows/cypress.yml @@ -34,16 +34,28 @@ jobs: - name: Install Frontend Deps run: yarn --cwd ./src/Ombi/ClientApp install - - name: Start Frontend - run: | - nohup yarn --cwd ./src/Ombi/ClientApp start & + - name: Build Frontend + run: yarn --cwd ./src/Ombi/ClientApp build - - name: Install Automation Deps - run: yarn --cwd ./tests install + - name: Build Docker Image + run: docker build -t ombi src/ - - name: Start Backend - run: | - nohup dotnet run --project ./src/Ombi -- --host http://*:3577 & + - name: Run Docker Image + run: nohup docker run --rm -p 5000:5000 ombi & + + - name: Sleep for server to start + run: sleep 20 + + # - name: Start Frontend + # run: | + # nohup yarn --cwd ./src/Ombi/ClientApp start & + + # - name: Install Automation Deps + # run: yarn --cwd ./tests install + + # - name: Start Backend + # run: | + # nohup dotnet run --project ./src/Ombi -- --host http://*:3577 & - name: Cypress Tests uses: cypress-io/github-action@v2.8.2 @@ -52,9 +64,9 @@ jobs: browser: chrome headless: true working-directory: tests - wait-on: http://localhost:3577/ + wait-on: http://localhost:5000/ # 10 minutes wait-on-timeout: 600 env: CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }} - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/src/.dockerignore b/src/.dockerignore new file mode 100644 index 000000000..252736d92 --- /dev/null +++ b/src/.dockerignore @@ -0,0 +1,285 @@ +**/bin/ +**/obj/ +**/.angular/ +**/node_modules/ +.gitignore +.git/ + + +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ + +# Visual Studio 2015 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUNIT +*.VisualState.xml +TestResult.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# DNX +project.lock.json +project.fragment.lock.json +artifacts/ +Properties/launchSettings.json + +*_i.c +*_p.c +*_i.h +*.ilk +*.meta +*.obj +*.pch +*.pdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# JustCode is a .NET coding add-in +.JustCode + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# TODO: Comment the next line if you want to checkin your web deploy settings +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# The packages folder can be ignored because of Package Restore +**/packages/* +# except build/, which is used as an MSBuild target. +!**/packages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/packages/repositories.config +# NuGet v3's project.json files produces more ignoreable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +node_modules/ +orleans.codegen.cs + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm + +# SQL Server files +*.mdf +*.ldf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# JetBrains Rider +.idea/ +*.sln.iml + +# CodeRush +.cr/ + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/ +tools/Cake.CoreCLR +.vscode +tools +.dotnet +Dockerfile + +# .env file contains default environment variables for docker +.env +.git/ \ No newline at end of file diff --git a/src/Ombi/wwwroot/translations/da.json b/src/Ombi/wwwroot/translations/da.json index 4773dc32e..87182d270 100644 --- a/src/Ombi/wwwroot/translations/da.json +++ b/src/Ombi/wwwroot/translations/da.json @@ -65,7 +65,7 @@ }, "ErrorPages": { "NotFound": "Siden blev ikke fundet", - "SomethingWentWrong": "Noget gik galt!" + "SomethingWentWrong": "Something went wrong!" }, "NavigationBar": { "Discover": "Opdag", @@ -212,13 +212,13 @@ "RequestPanel": { "Delete": "Slet Anmodning", "Approve": "Godkend Andmodning", - "Deny": "Afvis Request", + "Deny": "Deny Request", "Approve4K": "Godkend 4K Anmodning", - "Deny4K": "Afvis 4K Request", + "Deny4K": "Deny 4K Request", "ChangeAvailability": "Markér som tilgængelig", "Deleted": "De valgte elementer blev slettet", "Approved": "De valgte elementer blev godkendt", - "Denied": "De valgte elementer blev afvist" + "Denied": "Successfully denied selected items" }, "SuccessfullyApproved": "Godkendt", "SuccessfullyDeleted": "Anmodningen blev slettet", diff --git a/src/dockerfile b/src/dockerfile new file mode 100644 index 000000000..e5a4eaced --- /dev/null +++ b/src/dockerfile @@ -0,0 +1,76 @@ +# build stage +FROM mcr.microsoft.com/dotnet/sdk:6.0-bullseye-slim AS build +LABEL exclaimer-signature-analytics-build=true +ARG VERSION=1.0.0 +WORKDIR /source + +COPY ["Ombi.sln", "."] +COPY ["Ombi/Ombi.csproj", "Ombi/"] +COPY ["Ombi.Api/Ombi.Api.csproj", "Ombi.Api/"] +COPY ["Ombi.Api.CloudService/Ombi.Api.CloudService.csproj", "Ombi.Api.CloudService/"] +COPY ["Ombi.Api.CouchPotato/Ombi.Api.CouchPotato.csproj", "Ombi.Api.CouchPotato/"] +COPY ["Ombi.Api.Discord/Ombi.Api.Discord.csproj", "Ombi.Api.Discord/"] +COPY ["Ombi.Api.DogNzb/Ombi.Api.DogNzb.csproj", "Ombi.Api.DogNzb/"] +COPY ["Ombi.Api.Emby/Ombi.Api.Emby.csproj", "Ombi.Api.Emby/"] +COPY ["Ombi.Api.FanartTv/Ombi.Api.FanartTv.csproj", "Ombi.Api.FanartTv/"] +COPY ["Ombi.Api.Github/Ombi.Api.Github.csproj", "Ombi.Api.Github/"] +COPY ["Ombi.Api.Gotify/Ombi.Api.Gotify.csproj", "Ombi.Api.Gotify/"] +COPY ["Ombi.Api.GroupMe/Ombi.Api.GroupMe.csproj", "Ombi.Api.GroupMe/"] +COPY ["Ombi.Api.Jellyfin/Ombi.Api.Jellyfin.csproj", "Ombi.Api.Jellyfin/"] +COPY ["Ombi.Api.Lidarr/Ombi.Api.Lidarr.csproj", "Ombi.Api.Lidarr/"] +COPY ["Ombi.Api.Mattermost/Ombi.Api.Mattermost.csproj", "Ombi.Api.Mattermost/"] +COPY ["Ombi.Api.MediaServer/Ombi.Api.MediaServer.csproj", "Ombi.Api.MediaServer/"] +COPY ["Ombi.Api.MusicBrainz/Ombi.Api.MusicBrainz.csproj", "Ombi.Api.MusicBrainz/"] +COPY ["Ombi.Api.Notifications/Ombi.Api.Notifications.csproj", "Ombi.Api.Notifications/"] +COPY ["Ombi.Api.Plex/Ombi.Api.Plex.csproj", "Ombi.Api.Plex/"] +COPY ["Ombi.Api.Pushbullet/Ombi.Api.Pushbullet.csproj", "Ombi.Api.Pushbullet/"] +COPY ["Ombi.Api.Pushover/Ombi.Api.Pushover.csproj", "Ombi.Api.Pushover/"] +COPY ["Ombi.Api.Radarr/Ombi.Api.Radarr.csproj", "Ombi.Api.Radarr/"] +COPY ["Ombi.Api.RottenTomatoes/Ombi.Api.RottenTomatoes.csproj", "Ombi.Api.RottenTomatoes/"] +COPY ["Ombi.Api.Service/Ombi.Api.Service.csproj", "Ombi.Api.Service/"] +COPY ["Ombi.Api.SickRage/Ombi.Api.SickRage.csproj", "Ombi.Api.SickRage/"] +COPY ["Ombi.Api.Slack/Ombi.Api.Slack.csproj", "Ombi.Api.Slack/"] +COPY ["Ombi.Api.Sonarr/Ombi.Api.Sonarr.csproj", "Ombi.Api.Sonarr/"] +COPY ["Ombi.Api.Telegram/Ombi.Api.Telegram.csproj", "Ombi.Api.Telegram/"] +COPY ["Ombi.Api.Trakt/Ombi.Api.Trakt.csproj", "Ombi.Api.Trakt/"] +COPY ["Ombi.Api.TvMaze/Ombi.Api.TvMaze.csproj", "Ombi.Api.TvMaze/"] +COPY ["Ombi.Api.Webhook/Ombi.Api.Webhook.csproj", "Ombi.Api.Webhook/"] +COPY ["Ombi.Core/Ombi.Core.csproj", "Ombi.Core/"] +COPY ["Ombi.DependencyInjection/Ombi.DependencyInjection.csproj", "Ombi.DependencyInjection/"] +COPY ["Ombi.HealthChecks/Ombi.HealthChecks.csproj", "Ombi.HealthChecks/"] +COPY ["Ombi.Hubs/Ombi.Hubs.csproj", "Ombi.Hubs/"] +COPY ["Ombi.I18n/Ombi.I18n.csproj", "Ombi.I18n/"] +COPY ["Ombi.Helpers/Ombi.Helpers.csproj", "Ombi.Helpers/"] +COPY ["Ombi.Mapping/Ombi.Mapping.csproj", "Ombi.Mapping/"] +COPY ["Ombi.Notifications/Ombi.Notifications.csproj", "Ombi.Notifications/"] +COPY ["Ombi.Notifications.Templates/Ombi.Notifications.Templates.csproj", "Ombi.Notifications.Templates/"] +COPY ["Ombi.Schedule/Ombi.Schedule.csproj", "Ombi.Schedule/"] +COPY ["Ombi.Settings/Ombi.Settings.csproj", "Ombi.Settings/"] +COPY ["Ombi.Store/Ombi.Store.csproj", "Ombi.Store/"] +COPY ["Ombi.TheMovieDbApi/Ombi.Api.TheMovieDb.csproj", "Ombi.TheMovieDbApi/"] +COPY ["Ombi.Api.Twilio/Ombi.Api.Twilio.csproj", "Ombi.Api.Twilio/"] +COPY ["Ombi.Updater/Ombi.Updater.csproj", "Ombi.Updater/"] +RUN dotnet restore Ombi/Ombi.csproj +COPY . . + +# copy and build app +WORKDIR /source/Ombi +COPY ["Ombi/", "."] +RUN dotnet build "Ombi.csproj" -c release + + +FROM build AS publish + +RUN dotnet publish "Ombi.csproj" -c release --no-restore --no-build -o /app/publish + +FROM mcr.microsoft.com/dotnet/aspnet:6.0-bullseye-slim as base +WORKDIR /src/Ombi +EXPOSE 5000 + +FROM base AS final +WORKDIR /src/Ombi +COPY --from=publish /app/publish . +COPY ["Ombi/ClientApp/dist", "/src/Ombi/ClientApp/dist/"] +ENTRYPOINT ["dotnet", "Ombi.dll"] + + diff --git a/tests/cypress.json b/tests/cypress.json index 67fd65364..b1042c4fc 100644 --- a/tests/cypress.json +++ b/tests/cypress.json @@ -1,7 +1,7 @@ { "$schema": "https://on.cypress.io/cypress.schema.json", "supportFile": "cypress/support/index.ts", - "baseUrl": "http://localhost:3577", + "baseUrl": "http://localhost:5000", "integrationFolder": "cypress/tests", "testFiles": "**/*.spec.ts*", "watchForFileChanges": true, diff --git a/tests/cypress/config/regression.json b/tests/cypress/config/regression.json index d5ed9941c..d841b9906 100644 --- a/tests/cypress/config/regression.json +++ b/tests/cypress/config/regression.json @@ -1,7 +1,7 @@ { "$schema": "https://on.cypress.io/cypress.schema.json", "supportFile": "cypress/support/index.ts", - "baseUrl": "http://localhost:3577", + "baseUrl": "http://localhost:5000", "integrationFolder": "cypress/tests", "testFiles": "**/*.spec.ts*", "retries": {