Compare commits
No commits in common. "8316ed08a78d87099ac3d5cf30fece8cf0e68925" and "398b6fff059fdd7f92c858c4132146a9337786eb" have entirely different histories.
8316ed08a7
...
398b6fff05
@ -23,5 +23,3 @@
|
|||||||
**/values.dev.yaml
|
**/values.dev.yaml
|
||||||
LICENSE
|
LICENSE
|
||||||
README.md
|
README.md
|
||||||
Manga
|
|
||||||
settings
|
|
||||||
|
43
.github/workflows/docker-base.yml
vendored
Normal file
43
.github/workflows/docker-base.yml
vendored
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
name: Docker Image CI
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
|
||||||
|
build:
|
||||||
|
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
# https://github.com/docker/setup-qemu-action#usage
|
||||||
|
- name: Set up QEMU
|
||||||
|
uses: docker/setup-qemu-action@v3.2.0
|
||||||
|
|
||||||
|
# https://github.com/marketplace/actions/docker-setup-buildx
|
||||||
|
- name: Set up Docker Buildx
|
||||||
|
id: buildx
|
||||||
|
uses: docker/setup-buildx-action@v3.6.1
|
||||||
|
|
||||||
|
# https://github.com/docker/login-action#docker-hub
|
||||||
|
- name: Login to Docker Hub
|
||||||
|
uses: docker/login-action@v2
|
||||||
|
with:
|
||||||
|
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||||
|
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||||
|
|
||||||
|
# https://github.com/docker/build-push-action#multi-platform-image
|
||||||
|
- name: Build and push base
|
||||||
|
uses: docker/build-push-action@v6.7.0
|
||||||
|
with:
|
||||||
|
context: ./
|
||||||
|
file: ./Dockerfile-base
|
||||||
|
#platforms: linux/amd64,linux/arm64,linux/riscv64,linux/ppc64le,linux/s390x,linux/386,linux/mips64le,linux/mips64,linux/arm/v7,linux/arm/v6
|
||||||
|
platforms: linux/amd64
|
||||||
|
pull: true
|
||||||
|
push: true
|
||||||
|
tags: |
|
||||||
|
glax/tranga-base:latest
|
@ -38,7 +38,7 @@ jobs:
|
|||||||
context: ./
|
context: ./
|
||||||
file: ./Dockerfile
|
file: ./Dockerfile
|
||||||
#platforms: linux/amd64,linux/arm64,linux/riscv64,linux/ppc64le,linux/s390x,linux/386,linux/mips64le,linux/mips64,linux/arm/v7,linux/arm/v6
|
#platforms: linux/amd64,linux/arm64,linux/riscv64,linux/ppc64le,linux/s390x,linux/386,linux/mips64le,linux/mips64,linux/arm/v7,linux/arm/v6
|
||||||
platforms: linux/amd64,linux/arm64
|
platforms: linux/amd64
|
||||||
pull: true
|
pull: true
|
||||||
push: true
|
push: true
|
||||||
tags: |
|
tags: |
|
||||||
|
2
.github/workflows/docker-image-dev.yml
vendored
2
.github/workflows/docker-image-dev.yml
vendored
@ -38,7 +38,7 @@ jobs:
|
|||||||
context: ./
|
context: ./
|
||||||
file: ./Dockerfile
|
file: ./Dockerfile
|
||||||
#platforms: linux/amd64,linux/arm64,linux/riscv64,linux/ppc64le,linux/s390x,linux/386,linux/mips64le,linux/mips64,linux/arm/v7,linux/arm/v6
|
#platforms: linux/amd64,linux/arm64,linux/riscv64,linux/ppc64le,linux/s390x,linux/386,linux/mips64le,linux/mips64,linux/arm/v7,linux/arm/v6
|
||||||
platforms: linux/amd64,linux/arm64
|
platforms: linux/amd64
|
||||||
pull: true
|
pull: true
|
||||||
push: true
|
push: true
|
||||||
tags: |
|
tags: |
|
||||||
|
2
.github/workflows/docker-image-master.yml
vendored
2
.github/workflows/docker-image-master.yml
vendored
@ -38,7 +38,7 @@ jobs:
|
|||||||
context: ./
|
context: ./
|
||||||
file: ./Dockerfile
|
file: ./Dockerfile
|
||||||
#platforms: linux/amd64,linux/arm64,linux/riscv64,linux/ppc64le,linux/s390x,linux/386,linux/mips64le,linux/mips64,linux/arm/v7,linux/arm/v6
|
#platforms: linux/amd64,linux/arm64,linux/riscv64,linux/ppc64le,linux/s390x,linux/386,linux/mips64le,linux/mips64,linux/arm/v7,linux/arm/v6
|
||||||
platforms: linux/amd64,linux/arm64
|
platforms: linux/amd64
|
||||||
pull: true
|
pull: true
|
||||||
push: true
|
push: true
|
||||||
tags: |
|
tags: |
|
||||||
|
2
.github/workflows/docker-image-serverv2.yml
vendored
2
.github/workflows/docker-image-serverv2.yml
vendored
@ -38,7 +38,7 @@ jobs:
|
|||||||
context: ./
|
context: ./
|
||||||
file: ./Dockerfile
|
file: ./Dockerfile
|
||||||
#platforms: linux/amd64,linux/arm64,linux/riscv64,linux/ppc64le,linux/s390x,linux/386,linux/mips64le,linux/mips64,linux/arm/v7,linux/arm/v6
|
#platforms: linux/amd64,linux/arm64,linux/riscv64,linux/ppc64le,linux/s390x,linux/386,linux/mips64le,linux/mips64,linux/arm/v7,linux/arm/v6
|
||||||
platforms: linux/amd64,linux/arm64
|
platforms: linux/amd64
|
||||||
pull: true
|
pull: true
|
||||||
push: true
|
push: true
|
||||||
tags: |
|
tags: |
|
||||||
|
3
.gitignore
vendored
3
.gitignore
vendored
@ -20,6 +20,3 @@ riderModule.iml
|
|||||||
cover.jpg
|
cover.jpg
|
||||||
cover.png
|
cover.png
|
||||||
/.vscode
|
/.vscode
|
||||||
/Manga
|
|
||||||
/settings
|
|
||||||
*.DotSettings.user
|
|
45
Dockerfile
45
Dockerfile
@ -1,42 +1,29 @@
|
|||||||
# syntax=docker/dockerfile:1
|
# syntax=docker/dockerfile:1
|
||||||
ARG DOTNET=7.0
|
|
||||||
|
|
||||||
FROM mcr.microsoft.com/dotnet/runtime:$DOTNET AS base
|
FROM mcr.microsoft.com/dotnet/sdk:7.0 as build-env
|
||||||
WORKDIR /publish
|
|
||||||
ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true
|
|
||||||
ENV PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium
|
|
||||||
RUN apt-get update \
|
|
||||||
&& apt-get install -y libx11-6 libx11-xcb1 libatk1.0-0 libgtk-3-0 libcups2 libdrm2 libxkbcommon0 libxcomposite1 libxdamage1 libxrandr2 libgbm1 libpango-1.0-0 libcairo2 libasound2 libxshmfence1 libnss3 chromium \
|
|
||||||
&& apt-get autopurge -y \
|
|
||||||
&& apt-get autoclean -y
|
|
||||||
|
|
||||||
FROM mcr.microsoft.com/dotnet/sdk:$DOTNET AS build-env
|
|
||||||
WORKDIR /src
|
WORKDIR /src
|
||||||
|
COPY CLI /src/CLI
|
||||||
|
COPY Tranga /src/Tranga
|
||||||
|
COPY Logging /src/Logging
|
||||||
COPY Tranga.sln /src
|
COPY Tranga.sln /src
|
||||||
COPY CLI/CLI.csproj /src/CLI/CLI.csproj
|
RUN dotnet restore /src/Tranga/Tranga.csproj
|
||||||
COPY Logging/Logging.csproj /src/Logging/Logging.csproj
|
RUN dotnet publish -c Release -o /publish
|
||||||
COPY Tranga/Tranga.csproj /src/Tranga/Tranga.csproj
|
|
||||||
RUN dotnet restore /src/Tranga.sln
|
|
||||||
|
|
||||||
COPY . /src/
|
FROM glax/tranga-base:latest as runtime
|
||||||
RUN dotnet publish -c Release -o /publish -maxcpucount:1
|
|
||||||
|
|
||||||
FROM base AS runtime
|
|
||||||
EXPOSE 6531
|
EXPOSE 6531
|
||||||
ARG UNAME=tranga
|
ARG UNAME=tranga
|
||||||
ARG UID=1000
|
ARG UID=1000
|
||||||
ARG GID=1000
|
ARG GID=1000
|
||||||
RUN groupadd -g $GID -o $UNAME \
|
RUN groupadd -g $GID -o $UNAME
|
||||||
&& useradd -m -u $UID -g $GID -o -s /bin/bash $UNAME \
|
RUN useradd -m -u $UID -g $GID -o -s /bin/bash $UNAME
|
||||||
&& mkdir /usr/share/tranga-api \
|
RUN mkdir /usr/share/tranga-api
|
||||||
&& mkdir /Manga \
|
RUN mkdir /Manga
|
||||||
&& chown 1000:1000 /usr/share/tranga-api \
|
RUN chown 1000:1000 /usr/share/tranga-api
|
||||||
&& chown 1000:1000 /Manga
|
RUN chown 1000:1000 /Manga
|
||||||
USER $UNAME
|
USER $UNAME
|
||||||
|
|
||||||
WORKDIR /publish
|
WORKDIR /publish
|
||||||
COPY --chown=1000:1000 --from=build-env /publish .
|
COPY --from=build-env /publish .
|
||||||
USER 0
|
USER 0
|
||||||
ENTRYPOINT ["dotnet", "/publish/Tranga.dll"]
|
RUN chown 1000:1000 /publish
|
||||||
CMD ["-f", "-c", "-l", "/usr/share/tranga-api/logs"]
|
ENTRYPOINT ["dotnet", "/publish/Tranga.dll", "-f", "-c", "-l", "/usr/share/tranga-api/logs"]
|
||||||
|
8
Dockerfile-base
Normal file
8
Dockerfile-base
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
# syntax=docker/dockerfile:1
|
||||||
|
#FROM mcr.microsoft.com/dotnet/aspnet:7.0 as runtime
|
||||||
|
FROM mcr.microsoft.com/dotnet/runtime:7.0 as runtime
|
||||||
|
WORKDIR /publish
|
||||||
|
RUN apt-get update
|
||||||
|
RUN apt-get install -y libx11-6 libx11-xcb1 libatk1.0-0 libgtk-3-0 libcups2 libdrm2 libxkbcommon0 libxcomposite1 libxdamage1 libxrandr2 libgbm1 libpango-1.0-0 libcairo2 libasound2 libxshmfence1 libnss3
|
||||||
|
RUN apt-get autopurge -y
|
||||||
|
RUN apt-get autoclean -y
|
@ -128,19 +128,10 @@ public struct Manga
|
|||||||
public void MovePublicationFolder(string downloadDirectory, string newFolderName)
|
public void MovePublicationFolder(string downloadDirectory, string newFolderName)
|
||||||
{
|
{
|
||||||
string oldPath = Path.Join(downloadDirectory, this.folderName);
|
string oldPath = Path.Join(downloadDirectory, this.folderName);
|
||||||
this.folderName = newFolderName;//Create new Path with the new folderName
|
this.folderName = newFolderName;
|
||||||
string newPath = CreatePublicationFolder(downloadDirectory);
|
string newPath = CreatePublicationFolder(downloadDirectory);
|
||||||
if (Directory.Exists(oldPath))
|
if(Directory.Exists(oldPath))
|
||||||
{
|
Directory.Move(oldPath, newPath);
|
||||||
if (Directory.Exists(newPath)) //Move/Overwrite old Files, Delete old Directory
|
|
||||||
{
|
|
||||||
IEnumerable<string> newPathFileNames = new DirectoryInfo(newPath).GetFiles().Select(fi => fi.Name);
|
|
||||||
foreach(FileInfo fileInfo in new DirectoryInfo(oldPath).GetFiles().Where(fi => newPathFileNames.Contains(fi.Name) == false))
|
|
||||||
File.Move(fileInfo.FullName, Path.Join(newPath, fileInfo.Name), true);
|
|
||||||
Directory.Delete(oldPath);
|
|
||||||
}else
|
|
||||||
Directory.Move(oldPath, newPath);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void UpdateLatestDownloadedChapter(Chapter chapter)//TODO check files if chapters are all downloaded
|
public void UpdateLatestDownloadedChapter(Chapter chapter)//TODO check files if chapters are all downloaded
|
||||||
|
@ -13,12 +13,40 @@ internal class ChromiumDownloadClient : DownloadClient
|
|||||||
private const int StartTimeoutMs = 30000;
|
private const int StartTimeoutMs = 30000;
|
||||||
private readonly HttpDownloadClient _httpDownloadClient;
|
private readonly HttpDownloadClient _httpDownloadClient;
|
||||||
|
|
||||||
private async Task<IBrowser> StartBrowser()
|
private async Task<IBrowser> DownloadBrowser()
|
||||||
{
|
{
|
||||||
|
BrowserFetcher browserFetcher = new ();
|
||||||
|
foreach(string rev in browserFetcher.LocalRevisions().Where(rev => rev != ChromiumVersion))
|
||||||
|
browserFetcher.Remove(rev);
|
||||||
|
if (!browserFetcher.LocalRevisions().Contains(ChromiumVersion))
|
||||||
|
{
|
||||||
|
Log("Downloading headless browser");
|
||||||
|
DateTime last = DateTime.Now.Subtract(TimeSpan.FromSeconds(5));
|
||||||
|
browserFetcher.DownloadProgressChanged += (_, args) =>
|
||||||
|
{
|
||||||
|
double currentBytes = Convert.ToDouble(args.BytesReceived) / Convert.ToDouble(args.TotalBytesToReceive);
|
||||||
|
if (args.TotalBytesToReceive == args.BytesReceived)
|
||||||
|
Log("Browser downloaded.");
|
||||||
|
else if (DateTime.Now > last.AddSeconds(1))
|
||||||
|
{
|
||||||
|
Log($"Browser download progress: {currentBytes:P2}");
|
||||||
|
last = DateTime.Now;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
if (!browserFetcher.CanDownloadAsync(ChromiumVersion).Result)
|
||||||
|
{
|
||||||
|
Log($"Can't download browser version {ChromiumVersion}");
|
||||||
|
throw new Exception();
|
||||||
|
}
|
||||||
|
await browserFetcher.DownloadAsync(ChromiumVersion);
|
||||||
|
}
|
||||||
|
|
||||||
Log($"Starting Browser. ({StartTimeoutMs}ms timeout)");
|
Log($"Starting Browser. ({StartTimeoutMs}ms timeout)");
|
||||||
return await Puppeteer.LaunchAsync(new LaunchOptions
|
return await Puppeteer.LaunchAsync(new LaunchOptions
|
||||||
{
|
{
|
||||||
Headless = true,
|
Headless = true,
|
||||||
|
ExecutablePath = browserFetcher.GetExecutablePath(ChromiumVersion),
|
||||||
Args = new [] {
|
Args = new [] {
|
||||||
"--disable-gpu",
|
"--disable-gpu",
|
||||||
"--disable-dev-shm-usage",
|
"--disable-dev-shm-usage",
|
||||||
@ -30,7 +58,7 @@ internal class ChromiumDownloadClient : DownloadClient
|
|||||||
|
|
||||||
public ChromiumDownloadClient(GlobalBase clone) : base(clone)
|
public ChromiumDownloadClient(GlobalBase clone) : base(clone)
|
||||||
{
|
{
|
||||||
this.browser = StartBrowser().Result;
|
this.browser = DownloadBrowser().Result;
|
||||||
_httpDownloadClient = new(this);
|
_httpDownloadClient = new(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,21 +0,0 @@
|
|||||||
version: '3'
|
|
||||||
services:
|
|
||||||
tranga-api:
|
|
||||||
build:
|
|
||||||
dockerfile: Dockerfile
|
|
||||||
context: .
|
|
||||||
container_name: tranga-api
|
|
||||||
volumes:
|
|
||||||
- ./Manga:/Manga
|
|
||||||
- ./settings:/usr/share/tranga-api
|
|
||||||
ports:
|
|
||||||
- "6531:6531"
|
|
||||||
restart: unless-stopped
|
|
||||||
tranga-website:
|
|
||||||
image: glax/tranga-website:latest
|
|
||||||
container_name: tranga-website
|
|
||||||
ports:
|
|
||||||
- "9555:80"
|
|
||||||
depends_on:
|
|
||||||
- tranga-api
|
|
||||||
restart: unless-stopped
|
|
Loading…
Reference in New Issue
Block a user