From fa286a5591798f995bd962ce5759d0929f1bda7c Mon Sep 17 00:00:00 2001 From: Billy Richardson Date: Sun, 15 Sep 2024 14:17:08 -0700 Subject: [PATCH 01/12] Add init doc --- .github/workflows/build.yml | 10 +++ .gitignore | 3 + README.md | 172 ++++++++++++++++++++++++++---------- docfx.json | 66 ++++++++++++++ image/icon/favicon.ico | Bin 0 -> 15406 bytes image/icon/icon_128.png | Bin 46022 -> 26594 bytes image/icon/icon_50.png | Bin 0 -> 4958 bytes src/ThirdPartyNotices.txt | 60 +++++++++++++ toc.yml | 7 ++ 9 files changed, 272 insertions(+), 46 deletions(-) create mode 100644 docfx.json create mode 100644 image/icon/favicon.ico create mode 100644 image/icon/icon_50.png create mode 100644 src/ThirdPartyNotices.txt create mode 100644 toc.yml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 630ca5f..6caec10 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -59,6 +59,16 @@ jobs: src/Task/bin/Release/AggregateConfigBuildTask.${{ steps.get_version.outputs.VERSION }}.nupkg src/Task/bin/Release/AggregateConfigBuildTask.${{ steps.get_version.outputs.VERSION }}.snupkg + - name: Build documentation + run: docfx docfx.json + + - name: Upload documentation + uses: actions/upload-artifact@v4 + with: + name: Documentation + path: | + _site/ + integration_tests: needs: build strategy: diff --git a/.gitignore b/.gitignore index 80541ad..dda79a5 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,6 @@ **/.vs/** *.nupkg output*.json +_site/ +docs/ +src/.manifest diff --git a/README.md b/README.md index 11e3280..b10d93d 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,13 @@ -# AggregateConfigBuildTask - +--- +outputFileName: index.html +--- +# Aggregate Config Build Task + +[![NuGet Version](https://img.shields.io/nuget/v/AggregateConfigBuildTask)](https://www.nuget.org/packages/AggregateConfigBuildTask) [![GitHub Build Status](https://img.shields.io/github/actions/workflow/status/richardsondev/AggregateConfigBuildTask/build.yml?branch=main +)](https://github.com/richardsondev/AggregateConfigBuildTask/actions/workflows/build.yml?query=branch%3Amain)\ +\ **AggregateConfigBuildTask** is an MSBuild task that aggregates and transforms configuration files into more consumable formats like JSON, Azure ARM template parameters, YAML during the build process. -## Links - -* NuGet.org: https://www.nuget.org/packages/AggregateConfigBuildTask -* GitHub: https://github.com/richardsondev/AggregateConfigBuildTask - ## Features - Merge multiple configuration files into a single output format (JSON, Azure ARM parameters, or YAML). @@ -14,6 +15,11 @@ - Optionally include the source file name in each configuration entry. - Embed output files as resources in the assembly for easy inclusion in your project. +## Links + +* NuGet.org: https://www.nuget.org/packages/AggregateConfigBuildTask +* GitHub: https://github.com/richardsondev/AggregateConfigBuildTask + ## Installation To install the `AggregateConfigBuildTask` NuGet package, run the following command: @@ -42,13 +48,15 @@ Alternatively, add the following line to your `.csproj` file: | **AdditionalProperties** | A set of custom top-level properties to include in the final output. Use `ItemGroup` syntax to define key-value pairs. | | | | **IsQuietMode** | When true, only warning and error logs are generated by the task, suppressing standard informational output. | `true`, `false` | `false` | -## File Types +### File Types -| File Type | Extensions | -|-------------|----------------------| -| **Json** | `.json` | -| **Arm** | `.json` | -| **Yaml** | `.yml`, `.yaml` | +The `InputDirectory` will be scanned for files based on the specified `InputType`. The following table lists the file extensions that will be considered for each `InputType`: + +| **InputType** | **Extensions Scanned** | +|---------------|------------------------| +| `Json` | `.json` | +| `Arm` | `.json` | +| `Yaml` | `.yml`, `.yaml` | ## Usage @@ -129,38 +137,6 @@ You can also output the aggregated configuration back into YAML format: ``` -### Embedding Output Files as Resources - -You can embed the output files (such as the generated JSON) as resources in the assembly. This allows them to be accessed from within your code as embedded resources. - -```xml - - - - - - - - - - - - - - - - - -``` - -In this example: -- The generated output file `output.json` is embedded in the resulting assembly as a resource. -- You can access this resource programmatically using the `System.Reflection` API. - ## Example YAML Input Assume you have the following YAML files in the `Configs` directory: @@ -238,13 +214,117 @@ resources: } ``` +## Accessing Embedded Resources in C# Assemblies + +Embedding resources such as configuration files into your assembly allows you to package all necessary data within a single executable or library. + +In the following example, we'll demonstrate how to read and deserialize an embedded resource at runtime. + +### Embedded resource + +Consider the following YML configuration files that you want to merge and embed into your assembly: + +**configs/global.yml** +```yml +enabled: true +``` + +**configs/prod.yml** +```yml +environment: Production +``` + +### Project file reference + +Your project should contain a reference similar to below: + +**application.csproj** +```xml + + + + + + + +``` + +### Reading the embedded resource + +To access and deserialize the embedded JSON resource, use the following method: + +**application.cs** +```csharp +using System; +using System.IO; +using System.Reflection; +using System.Text.Json; + +public static T LoadFromEmbeddedResource(string resourceName) +{ + var assembly = Assembly.GetExecutingAssembly(); + using var stream = assembly.GetManifestResourceStream(resourceName) + ?? throw new FileNotFoundException($"Resource '{resourceName}' not found in assembly."); + + return JsonSerializer.Deserialize(stream, new JsonSerializerOptions + { + PropertyNameCaseInsensitive = true + }) ?? throw new InvalidOperationException("Failed to deserialize resource."); +} +``` + +### Defining the Configuration Class + +Create a class that matches the structure of your configuration: + +```csharp +public class AppConfig +{ + public bool Enabled { get; set; } + public string Environment { get; set; } +} +``` + +### Loading and Using the Configuration + +You can now load and use the configuration data as follows: + +```csharp +var applicationConfig = LoadFromEmbeddedResource("YourAssemblyName.output.json"); + +bool enabled = applicationConfig.Enabled; +Console.WriteLine($"Enabled: {enabled}"); // Outputs "True" + +string environment = applicationConfig.Environment; +Console.WriteLine($"Environment: {environment}"); // Outputs "Production" +``` + +**Note:** Replace `"YourAssemblyName.output.json"` with the actual resource name, which typically includes the assembly name and the output file name. + +### Finding the Correct Resource Name + +If you're unsure about the exact resource name, you can retrieve all resource names in the assembly by adding the following code and inspecting the output: + +```csharp +string[] resourceNames = Assembly.GetExecutingAssembly().GetManifestResourceNames(); +foreach (var name in resourceNames) +{ + Console.WriteLine(name); +} +``` + +This will list all embedded resources, allowing you to confirm the correct name to use when loading the resource. + ## License This project is licensed under the MIT License. See the [LICENSE](https://github.com/richardsondev/AggregateConfigBuildTask/blob/main/LICENSE) file for details. ## Third-Party Libraries -This project leverages the following third-party libraries: +This project leverages the following third-party libraries that are bundled with the package: - **[YamlDotNet](https://github.com/aaubry/YamlDotNet)**\ __Copyright (c) 2008, 2009, 2010, 2011, 2012, 2013, 2014 Antoine Aubry and contributors__\ diff --git a/docfx.json b/docfx.json new file mode 100644 index 0000000..b08cb12 --- /dev/null +++ b/docfx.json @@ -0,0 +1,66 @@ +{ + "metadata": [ + { + "src": [ + { + "files": [ + "src/**/*.csproj", + "images/icon/*" + ], + "exclude": [ + "**/bin/**", + "**/obj/**" + ] + } + ], + "dest": "./docs" + } + ], + "build": { + "globalMetadata": { + "_appTitle": "Aggregate Config Build Task", + "_appName": "AggregateConfigBuildTask", + "_enableSearch": "true", + "_appLogoPath": "image/icon/icon_50.png", + "_appFaviconPath": "image/icon/favicon.ico", + "_enableNewTab": "true", + "_disableContribution": "false", + "includePrivateMembers": "true", + "_appFooter": "Copyright © 2024 Billy Richardson. Generated with DocFX" + }, + "resource": [ + { + "files": [ + "image/**" + ] + } + ], + "content": [ + { + "files": "docs/*.yml", + "dest": "./" + }, + { + "files": [ + "README.md", + "toc.yml" + ], + "dest": "./" + } + ], + "dest": "_site", + "sitemap": { + "baseUrl": "https://richardsondev.github.io/AggregateConfigBuildTask", + "priority": 0.1, + "changefreq": "monthly" + }, + "postProcessors": [ + "ExtractSearchIndex" + ], + "template": [ + "statictoc", + "modern", + "material/material" + ] + } +} diff --git a/image/icon/favicon.ico b/image/icon/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..62c295e53d874d94b1d475c21b4ab64d207509cf GIT binary patch literal 15406 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 C=NeN0 literal 0 HcmV?d00001 diff --git a/image/icon/icon_128.png b/image/icon/icon_128.png index 24acfb39791b84cdb40a51765a8f70b7d505eff7..1a6adb244e4444e3e9f809474d4d51c010241ffa 100644 GIT binary patch delta 414 zcmV;P0b%~e=K|u-0gxk;<31CAD3N`UJxIeq9K~N#rG8X8*g?c0Lv^xHs)(ahu?QAQ zTcK44lS{v#Nkh`&;wZQl9Q;_UI=DFN>fkB}f*&Bx4o-?LQsV!TLW>v=j{EWM-sA2a zAT%pXHG3j}s@05CJSJvytD^4}{Rm(XQA8wW>WTDX2Cn1l9v;5lg?W~L`?){IkdikU z;1P-Em~PaFH;898YdYtB;vg$Y3h_Ddq(K)Xe&o9B@Ehl%%>vI18ky8QagbOncCp;W ztYoOf)5IY~)hJ)cI;?Qs;;dHctbI@ZLVsRcNpqd%7~)t$0!fIFQAZgS)DWgsBgI6D z_G2#oQQMy+mrSlQ7&#VyP=yM~_JjYy?{3Y)RMbiG$AI1!%la4xe7iuaVOihDmeo1| zywAXu*6~-H!0adKjgA&N0s`B>#dSxM_khbCVB|@c49S+fG=)L|ct4|W$^pZ-z`&Z* zTYDd;4?u>xTD}1e4uOdxWv{!uyRW;qf6ui0`vKr@a?{nTVt)XWmrXGU4+}IqWyG{v Iv(QcUWeHcz&Hw-a delta 19992 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 literal 0 HcmV?d00001 diff --git a/src/ThirdPartyNotices.txt b/src/ThirdPartyNotices.txt new file mode 100644 index 0000000..b78dc9a --- /dev/null +++ b/src/ThirdPartyNotices.txt @@ -0,0 +1,60 @@ + +THIRD-PARTY SOFTWARE NOTICES AND INFORMATION + +AggregateConfigBuildTask is based on or incorporates material from the projects listed below. + +1. YamlDotNet (https://github.com/aaubry/YamlDotNet) +2. YamlDotNet.System.Text.Json (https://github.com/adamabdelhamed/PowerArgs) + + +%% YamlDotNet NOTICES AND INFORMATION BEGIN HERE +========================================= +Copyright (c) 2008, 2009, 2010, 2011, 2012, 2013, 2014 Antoine Aubry and contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +========================================= +END OF YamlDotNet NOTICES AND INFORMATION + +%% YamlDotNet.System.Text.Json NOTICES AND INFORMATION BEGIN HERE +========================================= +MIT License + +Copyright (c) 2022 Ivan Josipovic + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +========================================= +END OF YamlDotNet.System.Text.Json NOTICES AND INFORMATION diff --git a/toc.yml b/toc.yml new file mode 100644 index 0000000..0d9c313 --- /dev/null +++ b/toc.yml @@ -0,0 +1,7 @@ +### YamlMime:TableOfContent +items: +- name: Home + href: README.md +- name: Code Docs + href: docs/ +memberLayout: memberpage From c3e79490c3b61ea09e45ea4b366d97fc9ce95bd4 Mon Sep 17 00:00:00 2001 From: Billy Richardson Date: Sun, 15 Sep 2024 14:21:21 -0700 Subject: [PATCH 02/12] Install docfx --- .github/workflows/build.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 6caec10..360422d 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -59,6 +59,11 @@ jobs: src/Task/bin/Release/AggregateConfigBuildTask.${{ steps.get_version.outputs.VERSION }}.nupkg src/Task/bin/Release/AggregateConfigBuildTask.${{ steps.get_version.outputs.VERSION }}.snupkg + - name: Setup DocFX + uses: crazy-max/ghaction-chocolatey@v1 + with: + args: install docfx + - name: Build documentation run: docfx docfx.json From 48a6c1e6ab306a6e7453fb1564ebb3114ec41bc0 Mon Sep 17 00:00:00 2001 From: Billy Richardson Date: Sun, 15 Sep 2024 14:28:00 -0700 Subject: [PATCH 03/12] Theme --- .github/workflows/build.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 360422d..c1a7037 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -64,6 +64,12 @@ jobs: with: args: install docfx + - name: Download material.zip + run: wget https://github.com/ovasquez/docfx-material/releases/download/1.0.0/material.zip -O material.zip + + - name: Extract material.zip + run: unzip material.zip -d ./material + - name: Build documentation run: docfx docfx.json From ba4890755aa73dca37dcfa15e6301515359bbafb Mon Sep 17 00:00:00 2001 From: Billy Richardson Date: Sun, 15 Sep 2024 14:35:23 -0700 Subject: [PATCH 04/12] Fix command --- .github/workflows/build.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index c1a7037..abc3fd4 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -65,10 +65,12 @@ jobs: args: install docfx - name: Download material.zip - run: wget https://github.com/ovasquez/docfx-material/releases/download/1.0.0/material.zip -O material.zip + run: Invoke-WebRequest -Uri https://github.com/ovasquez/docfx-material/releases/download/1.0.0/material.zip -OutFile material.zip + shell: pwsh - name: Extract material.zip - run: unzip material.zip -d ./material + run: Expand-Archive -Path material.zip -DestinationPath ./material + shell: pwsh - name: Build documentation run: docfx docfx.json From eb7c27433493d359248d06bce712a1cf6bab4c16 Mon Sep 17 00:00:00 2001 From: Billy Richardson Date: Sun, 15 Sep 2024 15:09:25 -0700 Subject: [PATCH 05/12] Third party notice package --- src/Task/AggregateConfigBuildTask.csproj | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/Task/AggregateConfigBuildTask.csproj b/src/Task/AggregateConfigBuildTask.csproj index ae59098..cf1ee48 100644 --- a/src/Task/AggregateConfigBuildTask.csproj +++ b/src/Task/AggregateConfigBuildTask.csproj @@ -53,11 +53,9 @@ - - licenses/YamlDotNet/LICENSE.txt - + licenses/LICENSE From 6d0d4c70d9c734066dca3dc556bdf9d9e43082bb Mon Sep 17 00:00:00 2001 From: Billy Richardson Date: Sat, 21 Sep 2024 02:42:38 -0700 Subject: [PATCH 06/12] Create new workflow --- .github/workflows/build.yml | 23 --------- .github/workflows/pages.yml | 62 ++++++++++++++++++++++++ src/Task/AggregateConfigBuildTask.csproj | 4 +- src/Task/AssemblyInfo.cs | 2 +- src/UnitTests/AssemblyInfo.cs | 7 +++ 5 files changed, 72 insertions(+), 26 deletions(-) create mode 100644 .github/workflows/pages.yml create mode 100644 src/UnitTests/AssemblyInfo.cs diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 287f957..d9dca36 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -59,29 +59,6 @@ jobs: src/Task/bin/Release/AggregateConfigBuildTask.${{ steps.get_version.outputs.VERSION }}.nupkg src/Task/bin/Release/AggregateConfigBuildTask.${{ steps.get_version.outputs.VERSION }}.snupkg - - name: Setup DocFX - uses: crazy-max/ghaction-chocolatey@v1 - with: - args: install docfx - - - name: Download material.zip - run: Invoke-WebRequest -Uri https://github.com/ovasquez/docfx-material/releases/download/1.0.0/material.zip -OutFile material.zip - shell: pwsh - - - name: Extract material.zip - run: Expand-Archive -Path material.zip -DestinationPath ./material - shell: pwsh - - - name: Build documentation - run: docfx docfx.json - - - name: Upload documentation - uses: actions/upload-artifact@v4 - with: - name: Documentation - path: | - _site/ - integration_tests: needs: build strategy: diff --git a/.github/workflows/pages.yml b/.github/workflows/pages.yml new file mode 100644 index 0000000..2cff13e --- /dev/null +++ b/.github/workflows/pages.yml @@ -0,0 +1,62 @@ +name: Deploy content to Pages + +on: + push: + branches: ["main", "docfx"] + + workflow_dispatch: + +permissions: + contents: read + pages: write + id-token: write + +concurrency: + group: "pages" + cancel-in-progress: false + +jobs: + deploy: + environment: + name: github-pages + #url: ${{ steps.deployment.outputs.page_url }} + + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup Pages + uses: actions/configure-pages@v5 + + - name: Setup DocFX + uses: crazy-max/ghaction-chocolatey@v1 + with: + args: install docfx + + - name: Download material.zip + run: Invoke-WebRequest -Uri https://github.com/ovasquez/docfx-material/releases/download/1.0.0/material.zip -OutFile material.zip + shell: pwsh + + - name: Extract material.zip + run: Expand-Archive -Path material.zip -DestinationPath ./material + shell: pwsh + + - name: Build documentation + run: docfx docfx.json + + - name: Upload artifact + uses: actions/upload-artifact@v4 + with: + name: Documentation + path: | + . + + #- name: Upload to Pages + # uses: actions/upload-pages-artifact@v3 + # with: + # path: '_site/' + + #- name: Deploy to GitHub Pages + # id: deployment + # uses: actions/deploy-pages@v4 diff --git a/src/Task/AggregateConfigBuildTask.csproj b/src/Task/AggregateConfigBuildTask.csproj index cf1ee48..78079ea 100644 --- a/src/Task/AggregateConfigBuildTask.csproj +++ b/src/Task/AggregateConfigBuildTask.csproj @@ -16,9 +16,9 @@ AggregateConfigBuildTask 0.0.1 - richardsondev + Billy Richardson richardsondev - richardsondev + https://richardson.software Merges configuration files at build time, allowing them to be embedded as resources for streamlined deployment and access. yaml, json, arm, build, configuration, msbuild MIT diff --git a/src/Task/AssemblyInfo.cs b/src/Task/AssemblyInfo.cs index 55e8f40..eedf9fc 100644 --- a/src/Task/AssemblyInfo.cs +++ b/src/Task/AssemblyInfo.cs @@ -4,5 +4,5 @@ [assembly: InternalsVisibleTo("AggregateConfig.Tests.Unit")] [assembly: AssemblyMetadata("Copyright", "2024")] -[assembly: AssemblyMetadata("Author", "richardsondev")] +[assembly: AssemblyMetadata("Author", "Billy Richardson")] [assembly: AssemblyMetadata("RepositoryUrl", "https://github.com/richardsondev/AggregateConfigBuildTask")] diff --git a/src/UnitTests/AssemblyInfo.cs b/src/UnitTests/AssemblyInfo.cs new file mode 100644 index 0000000..75f608b --- /dev/null +++ b/src/UnitTests/AssemblyInfo.cs @@ -0,0 +1,7 @@ +using System.Reflection; + +[assembly: Parallelize(Scope = ExecutionScope.MethodLevel)] + +[assembly: AssemblyMetadata("Copyright", "2024")] +[assembly: AssemblyMetadata("Author", "Billy Richardson")] +[assembly: AssemblyMetadata("RepositoryUrl", "https://github.com/richardsondev/AggregateConfigBuildTask")] From dcf8a5c5002e9d412a4faae6b45ed5067f280d5d Mon Sep 17 00:00:00 2001 From: Billy Richardson Date: Sat, 21 Sep 2024 02:48:21 -0700 Subject: [PATCH 07/12] Remove pwsh --- .github/workflows/pages.yml | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pages.yml b/.github/workflows/pages.yml index 2cff13e..e4c75bc 100644 --- a/.github/workflows/pages.yml +++ b/.github/workflows/pages.yml @@ -30,21 +30,17 @@ jobs: uses: actions/configure-pages@v5 - name: Setup DocFX - uses: crazy-max/ghaction-chocolatey@v1 - with: - args: install docfx - + run: sudo apt-get install -y docfx + - name: Download material.zip - run: Invoke-WebRequest -Uri https://github.com/ovasquez/docfx-material/releases/download/1.0.0/material.zip -OutFile material.zip - shell: pwsh - + run: wget https://github.com/ovasquez/docfx-material/releases/download/1.0.0/material.zip -O material.zip + - name: Extract material.zip - run: Expand-Archive -Path material.zip -DestinationPath ./material - shell: pwsh - + run: unzip material.zip -d ./material + - name: Build documentation run: docfx docfx.json - + - name: Upload artifact uses: actions/upload-artifact@v4 with: From 1df5b1ae654b88ca0a559b5cec7221c82a1c7b84 Mon Sep 17 00:00:00 2001 From: Billy Richardson Date: Sat, 21 Sep 2024 02:52:49 -0700 Subject: [PATCH 08/12] Move header to pipeline and update docfx install --- .github/workflows/pages.yml | 19 +++++++++++++++---- README.md | 7 ++----- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/.github/workflows/pages.yml b/.github/workflows/pages.yml index e4c75bc..fb74e33 100644 --- a/.github/workflows/pages.yml +++ b/.github/workflows/pages.yml @@ -29,8 +29,11 @@ jobs: - name: Setup Pages uses: actions/configure-pages@v5 - - name: Setup DocFX - run: sudo apt-get install -y docfx + - name: Download DocFX + run: wget https://github.com/dotnet/docfx/releases/download/v2.58/docfx.zip -O docfx.zip + + - name: Extract DocFX + run: unzip docfx.zip -d ./docfx - name: Download material.zip run: wget https://github.com/ovasquez/docfx-material/releases/download/1.0.0/material.zip -O material.zip @@ -38,8 +41,16 @@ jobs: - name: Extract material.zip run: unzip material.zip -d ./material + - name: Add header to README.md + run: | + echo '---' > temp.md + echo 'outputFileName: index.html' >> temp.md + echo '---' >> temp.md + cat README.md >> temp.md + mv temp.md README.md + - name: Build documentation - run: docfx docfx.json + run: ./docfx/docfx/docfx docfx.json - name: Upload artifact uses: actions/upload-artifact@v4 @@ -47,7 +58,7 @@ jobs: name: Documentation path: | . - + #- name: Upload to Pages # uses: actions/upload-pages-artifact@v3 # with: diff --git a/README.md b/README.md index 2319e4b..9f253ab 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,9 @@ ---- -outputFileName: index.html ---- -# Aggregate Config Build Task +# Aggregate Config Build Task [![NuGet Version](https://img.shields.io/nuget/v/AggregateConfigBuildTask)](https://www.nuget.org/packages/AggregateConfigBuildTask) [![GitHub Build Status](https://img.shields.io/github/actions/workflow/status/richardsondev/AggregateConfigBuildTask/build.yml?branch=main )](https://github.com/richardsondev/AggregateConfigBuildTask/actions/workflows/build.yml?query=branch%3Amain) -**AggregateConfigBuildTask** is an MSBuild task that aggregates and transforms configuration files into more consumable formats like JSON, Azure ARM template parameters, YAML during the build process. +**AggregateConfigBuildTask** is a cross-platform MSBuild task that aggregates and transforms configuration files into more consumable formats like JSON, Azure ARM template parameters, YAML during the build process. ## Features From a1da71ef71b16a94aa8f5e10ed6cfaaf0d5c0e4c Mon Sep 17 00:00:00 2001 From: Billy Richardson Date: Sat, 21 Sep 2024 02:56:58 -0700 Subject: [PATCH 09/12] Use windows for docfx --- .github/workflows/pages.yml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pages.yml b/.github/workflows/pages.yml index fb74e33..7e6ef62 100644 --- a/.github/workflows/pages.yml +++ b/.github/workflows/pages.yml @@ -21,7 +21,7 @@ jobs: name: github-pages #url: ${{ steps.deployment.outputs.page_url }} - runs-on: ubuntu-latest + runs-on: windows-latest steps: - name: Checkout uses: actions/checkout@v4 @@ -30,27 +30,37 @@ jobs: uses: actions/configure-pages@v5 - name: Download DocFX - run: wget https://github.com/dotnet/docfx/releases/download/v2.58/docfx.zip -O docfx.zip + shell: pwsh + run: | + Invoke-WebRequest -Uri https://github.com/dotnet/docfx/releases/download/v2.58/docfx.zip -OutFile docfx.zip - name: Extract DocFX - run: unzip docfx.zip -d ./docfx + shell: pwsh + run: | + Expand-Archive -Path docfx.zip -DestinationPath ./docfx - name: Download material.zip - run: wget https://github.com/ovasquez/docfx-material/releases/download/1.0.0/material.zip -O material.zip + shell: pwsh + run: | + Invoke-WebRequest -Uri https://github.com/ovasquez/docfx-material/releases/download/1.0.0/material.zip -OutFile material.zip - name: Extract material.zip - run: unzip material.zip -d ./material + shell: pwsh + run: | + Expand-Archive -Path material.zip -DestinationPath ./material - name: Add header to README.md + shell: pwsh run: | - echo '---' > temp.md - echo 'outputFileName: index.html' >> temp.md - echo '---' >> temp.md - cat README.md >> temp.md - mv temp.md README.md + Add-Content -Path temp.md -Value "---" + Add-Content -Path temp.md -Value "outputFileName: index.html" + Add-Content -Path temp.md -Value "---" + Get-Content -Path README.md | Add-Content -Path temp.md + Move-Item -Path temp.md -Destination README.md -Force - name: Build documentation - run: ./docfx/docfx/docfx docfx.json + shell: pwsh + run: .\docfx\docfx\docfx.exe docfx.json - name: Upload artifact uses: actions/upload-artifact@v4 From ebdf6689afb5116fb98c2d43c7b7f3dba8b1b77b Mon Sep 17 00:00:00 2001 From: Billy Richardson Date: Sat, 21 Sep 2024 03:00:16 -0700 Subject: [PATCH 10/12] Add schedule --- .github/workflows/build.yml | 3 +++ .github/workflows/pages.yml | 5 ++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index d9dca36..22456b0 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -11,6 +11,9 @@ on: - main workflow_dispatch: + schedule: + - cron: "0 2 15-21 * 3" # Runs at 02:00 UTC on the 3rd Wednesday of every month + jobs: build: runs-on: windows-latest diff --git a/.github/workflows/pages.yml b/.github/workflows/pages.yml index 7e6ef62..af046a0 100644 --- a/.github/workflows/pages.yml +++ b/.github/workflows/pages.yml @@ -6,6 +6,9 @@ on: workflow_dispatch: + schedule: + - cron: "0 2 15-21 * 3" # Runs at 02:00 UTC on the 3rd Wednesday of every month + permissions: contents: read pages: write @@ -60,7 +63,7 @@ jobs: - name: Build documentation shell: pwsh - run: .\docfx\docfx\docfx.exe docfx.json + run: .\docfx\docfx.exe docfx.json - name: Upload artifact uses: actions/upload-artifact@v4 From a03380a130789a32f444e13e80e12514a8e824e6 Mon Sep 17 00:00:00 2001 From: Billy Richardson Date: Sat, 21 Sep 2024 03:06:19 -0700 Subject: [PATCH 11/12] update template --- .github/workflows/pages.yml | 4 ++-- docfx.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pages.yml b/.github/workflows/pages.yml index af046a0..05cf978 100644 --- a/.github/workflows/pages.yml +++ b/.github/workflows/pages.yml @@ -35,7 +35,7 @@ jobs: - name: Download DocFX shell: pwsh run: | - Invoke-WebRequest -Uri https://github.com/dotnet/docfx/releases/download/v2.58/docfx.zip -OutFile docfx.zip + Invoke-WebRequest -Uri https://github.com/dotnet/docfx/releases/download/v2.77.0/docfx-win-x64-v2.77.0.zip -OutFile docfx.zip - name: Extract DocFX shell: pwsh @@ -50,7 +50,7 @@ jobs: - name: Extract material.zip shell: pwsh run: | - Expand-Archive -Path material.zip -DestinationPath ./material + Expand-Archive -Path material.zip -DestinationPath ./ - name: Add header to README.md shell: pwsh diff --git a/docfx.json b/docfx.json index b08cb12..cdf4396 100644 --- a/docfx.json +++ b/docfx.json @@ -60,7 +60,7 @@ "template": [ "statictoc", "modern", - "material/material" + "material" ] } } From 65c14f7e092d64f89e14794fa813f470bb1796fb Mon Sep 17 00:00:00 2001 From: Billy Richardson Date: Sat, 21 Sep 2024 03:11:59 -0700 Subject: [PATCH 12/12] finalize --- .github/workflows/pages.yml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/workflows/pages.yml b/.github/workflows/pages.yml index 05cf978..6224b54 100644 --- a/.github/workflows/pages.yml +++ b/.github/workflows/pages.yml @@ -2,7 +2,7 @@ name: Deploy content to Pages on: push: - branches: ["main", "docfx"] + branches: ["main"] workflow_dispatch: @@ -70,13 +70,13 @@ jobs: with: name: Documentation path: | - . + ./_site - #- name: Upload to Pages - # uses: actions/upload-pages-artifact@v3 - # with: - # path: '_site/' + - name: Upload to Pages + uses: actions/upload-pages-artifact@v3 + with: + path: '_site/' - #- name: Deploy to GitHub Pages - # id: deployment - # uses: actions/deploy-pages@v4 + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4