diff --git a/.dockerignore b/.dockerignore index 3bdd11108..30c012657 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,8 +1,8 @@ -.git -**/bin -**/obj -**/node_modules +.git* +**/bin* +**/obj* +**/node_modules* Dockerfile docker-compose.yml -deploy/ +deploy* **/package-lock.json diff --git a/.github/workflows/docker-image.yml b/.github/workflows/docker-image.yml new file mode 100644 index 000000000..baa40f1c7 --- /dev/null +++ b/.github/workflows/docker-image.yml @@ -0,0 +1,32 @@ +name: build release docker + +on: + push: + branches: + - 'preview' + pull_request: + branches: + - 'preview' + +jobs: + build: + runs-on: ubuntu-latest + steps: + - + name: Set up QEMU + uses: docker/setup-qemu-action@v2 + - + name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + - + name: Login to Docker Hub + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + - + name: Build and push + uses: docker/build-push-action@v4 + with: + push: true + tags: dorthl/blogifier:preview diff --git a/Dockerfile b/Dockerfile index 3e237e2bb..dc6a203ff 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,15 +1,18 @@ -FROM mcr.microsoft.com/dotnet/sdk:7.0-alpine as sdk +FROM mcr.microsoft.com/dotnet/sdk:8.0.100-preview.7-alpine3.18 as sdk # TOTO zh-CH -RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories +# RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories RUN apk add --no-cache npm +# VOLUME ["/root/.nuget","/root/.local/share/NuGet","/root/.npm"] +# TOTO zh-CH +# CMD [ "npm config set registry http://mirrors.cloud.tencent.com/npm" ] # Copy everything else and build COPY ./ /opt/blogifier WORKDIR /opt/blogifier RUN ["dotnet","publish", "-c", "Release","/p:RuntimeIdentifier=linux-musl-x64", "./src/Blogifier/Blogifier.csproj","-o","dist" ] -FROM mcr.microsoft.com/dotnet/aspnet:7.0-alpine as run +FROM mcr.microsoft.com/dotnet/aspnet:8.0.0-preview.7-alpine3.18-composite as run # TOTO zh-CH -RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories +# RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories RUN apk add --no-cache icu-libs ENV DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=false COPY --from=sdk /opt/blogifier/dist /opt/blogifier/ diff --git a/docker.sh b/docker.sh index 17697cc0a..16328b1bf 100644 --- a/docker.sh +++ b/docker.sh @@ -1,3 +1,3 @@ # docker -docker build -t dorthl/blogifier:latest . -docker push dorthl/blogifier:latest +docker build -t dorthl/blogifier:preview . +docker push dorthl/blogifier:preview diff --git a/global.json b/global.json index e383752a1..4ba67068e 100644 --- a/global.json +++ b/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "7.0.304" + "version": "8.0.100-preview.7.23376.3" } } diff --git a/src/Blogifier.Admin/Blogifier.Admin.csproj b/src/Blogifier.Admin/Blogifier.Admin.csproj index 1b365811c..e2496d344 100644 --- a/src/Blogifier.Admin/Blogifier.Admin.csproj +++ b/src/Blogifier.Admin/Blogifier.Admin.csproj @@ -1,6 +1,6 @@ - net7.0 + net8.0 enable + false - - - - + + + diff --git a/src/Blogifier.Admin/Components/EditorComponent.razor b/src/Blogifier.Admin/Components/EditorComponent.razor deleted file mode 100644 index e9881bf67..000000000 --- a/src/Blogifier.Admin/Components/EditorComponent.razor +++ /dev/null @@ -1,73 +0,0 @@ -@using System.Text.RegularExpressions; -@using System.Text; - -@implements IAsyncDisposable - -@inject IStringLocalizer _localizer -@inject IJSRuntime _jsRuntime -@inject HttpClient _httpClient - -
- -
- - -@code { - - [Parameter] public string Toolbar { get; set; } = default!; - - private ValueTask _taskModule; - private ElementReference? _textareaReference; - private InputFile? _inputFileReference; - - protected override async Task OnAfterRenderAsync(bool firstRender) - { - if (firstRender) - { - _taskModule = _jsRuntime.InvokeAsync("import", "./admin/js/editor.js"); - var module = await _taskModule; - var element = _inputFileReference?.Element; - await module.InvokeVoidAsync("loadEditor", Toolbar, _textareaReference, element); - } - } - - protected async Task LoadImageFiles(InputFileChangeEventArgs args) - { - var module = await _taskModule; - var element = _inputFileReference?.Element; - await module.InvokeVoidAsync("writeFrontFile", element); - } - - public async ValueTask SetValueAsync(string value) - { - var module = await _taskModule; - await module.InvokeVoidAsync("setEditorValue", value); - } - - public async ValueTask GetValueAsync() - { - var module = await _taskModule; - var content = await module.InvokeAsync("getEditorValue"); - var imgsMatches = StringHelper.MatchesMarkdownImgBlob(content); - - if (imgsMatches.Count > 0) - { - var contentStringBuilder = new StringBuilder(content); - foreach (Match match in imgsMatches) - { - var imageUrl = match.Groups[1].Value; - var imageBytes = await _httpClient.GetByteArrayAsync(imageUrl); - var base64String = Convert.ToBase64String(imageBytes); - contentStringBuilder.Replace(imageUrl, "data:image/png;base64," + base64String); - } - content = contentStringBuilder.ToString(); - } - return content; - } - - async ValueTask IAsyncDisposable.DisposeAsync() - { - var module = await _taskModule; - await module.DisposeAsync(); - } -} diff --git a/src/Blogifier.Admin/Components/NavMenuComponent.razor b/src/Blogifier.Admin/Components/NavMenuComponent.razor index dad13a69d..6a7b98856 100644 --- a/src/Blogifier.Admin/Components/NavMenuComponent.razor +++ b/src/Blogifier.Admin/Components/NavMenuComponent.razor @@ -3,6 +3,7 @@ @inject AuthenticationStateProvider _stateProvider @inject IJSRuntime _jsRuntime @inject IStringLocalizer _localizer +@inject CommonJsInterop _commonJsInterop @code { @@ -20,7 +21,7 @@ { if (firstRender) { - await _jsRuntime.InvokeAsync("commonJsFunctions.setTooltip", ""); + await _commonJsInterop.SetTooltipAsync(); } } } @@ -88,7 +89,7 @@ {
  • @_localizer["newsletter"]
  • @_localizer["settings"]
  • @_localizer["customize"]
  • -
  • @_localizer["edit-profile"]
  • +
  • @_localizer["account-profile"]
  • diff --git a/src/Blogifier.Themes.Standard/Views/Themes/standard/initialize.cshtml b/src/Blogifier.Themes.Standard/Views/Themes/standard/initialize.cshtml index 9b8b68d9a..3d22500b6 100644 --- a/src/Blogifier.Themes.Standard/Views/Themes/standard/initialize.cshtml +++ b/src/Blogifier.Themes.Standard/Views/Themes/standard/initialize.cshtml @@ -4,7 +4,7 @@ Layout = "layouts/_account.cshtml"; } -@section HeadMeta{ +@section HeaderScript{ @_localizer["initialize"] } diff --git a/src/Blogifier.Themes.Standard/Views/Themes/standard/layouts/_account.cshtml b/src/Blogifier.Themes.Standard/Views/Themes/standard/layouts/_account.cshtml index 201dbb63d..32d238add 100644 --- a/src/Blogifier.Themes.Standard/Views/Themes/standard/layouts/_account.cshtml +++ b/src/Blogifier.Themes.Standard/Views/Themes/standard/layouts/_account.cshtml @@ -6,9 +6,10 @@ - @await RenderSectionAsync("HeadMeta",false) - + + + @await RenderSectionAsync("HeaderScript", required: false) @@ -27,7 +28,7 @@ @RenderBody() - + diff --git a/src/Blogifier.Themes.Standard/Views/Themes/standard/layouts/_base.cshtml b/src/Blogifier.Themes.Standard/Views/Themes/standard/layouts/_base.cshtml index b9ca833d4..f6350fc9a 100644 --- a/src/Blogifier.Themes.Standard/Views/Themes/standard/layouts/_base.cshtml +++ b/src/Blogifier.Themes.Standard/Views/Themes/standard/layouts/_base.cshtml @@ -4,7 +4,6 @@ - @await RenderSectionAsync("HeadMeta",false) - + + @await RenderSectionAsync("HeaderScript", required: false) @RenderBody() - diff --git a/src/Blogifier.Themes.Standard/Views/Themes/standard/layouts/_main.cshtml b/src/Blogifier.Themes.Standard/Views/Themes/standard/layouts/_main.cshtml index 61581df89..4607be766 100644 --- a/src/Blogifier.Themes.Standard/Views/Themes/standard/layouts/_main.cshtml +++ b/src/Blogifier.Themes.Standard/Views/Themes/standard/layouts/_main.cshtml @@ -29,14 +29,16 @@ --bf-radius: .5rem; } - + @Html.Raw(Model.Main.HeaderScript) @RenderBody() - + + + @RenderSection("FooterScript", required: false) @Html.Raw(Model.Main.FooterScript) diff --git a/src/Blogifier.Themes.Standard/Views/Themes/standard/layouts/_profile.cshtml b/src/Blogifier.Themes.Standard/Views/Themes/standard/layouts/_profile.cshtml index 27cbb22da..addc7dc57 100644 --- a/src/Blogifier.Themes.Standard/Views/Themes/standard/layouts/_profile.cshtml +++ b/src/Blogifier.Themes.Standard/Views/Themes/standard/layouts/_profile.cshtml @@ -7,9 +7,8 @@ - @await RenderSectionAsync("HeadMeta",false) - - + + @await RenderSectionAsync("HeaderScript",false) @@ -53,7 +52,8 @@ - + + @await RenderSectionAsync("FooterScript",false) diff --git a/src/Blogifier.Themes.Standard/Views/Themes/standard/login.cshtml b/src/Blogifier.Themes.Standard/Views/Themes/standard/login.cshtml index 1c2e746db..33f3c6cff 100644 --- a/src/Blogifier.Themes.Standard/Views/Themes/standard/login.cshtml +++ b/src/Blogifier.Themes.Standard/Views/Themes/standard/login.cshtml @@ -4,7 +4,7 @@ } @inject IStringLocalizer _localizer -@section HeadMeta{ +@section HeaderScript{ @_localizer["login"] } @@ -25,4 +25,5 @@ + @_localizer["register"] diff --git a/src/Blogifier.Themes.Standard/Views/Themes/standard/page.cshtml b/src/Blogifier.Themes.Standard/Views/Themes/standard/page.cshtml index 81f970c42..e50ff1a9a 100644 --- a/src/Blogifier.Themes.Standard/Views/Themes/standard/page.cshtml +++ b/src/Blogifier.Themes.Standard/Views/Themes/standard/page.cshtml @@ -7,10 +7,14 @@ Layout = "layouts/_main.cshtml"; } +@section FooterScript { + +} +
    - @Model.PostSlug.Post.Title + @Model.PostSlug.Post.Title

    @Model.PostSlug.Post.Title

    diff --git a/src/Blogifier.Themes.Standard/Views/Themes/standard/password.cshtml b/src/Blogifier.Themes.Standard/Views/Themes/standard/password.cshtml index 2703d0e87..8b1333603 100644 --- a/src/Blogifier.Themes.Standard/Views/Themes/standard/password.cshtml +++ b/src/Blogifier.Themes.Standard/Views/Themes/standard/password.cshtml @@ -6,7 +6,7 @@ @inject IStringLocalizer _localizer -@section HeadMeta{ +@section HeaderScript{ @_localizer["edit-profile"] } diff --git a/src/Blogifier.Themes.Standard/Views/Themes/standard/post.cshtml b/src/Blogifier.Themes.Standard/Views/Themes/standard/post.cshtml index 4d14f2c84..f5b798103 100644 --- a/src/Blogifier.Themes.Standard/Views/Themes/standard/post.cshtml +++ b/src/Blogifier.Themes.Standard/Views/Themes/standard/post.cshtml @@ -1,20 +1,25 @@ @model PostModel @inject IStringLocalizer _localizer + @{ Layout = "layouts/_main.cshtml"; ; } +@section FooterScript { + +} +
    - +

    @Model.PostSlug.Post.Title