From 54bcb327eb8fb3ddd3e4349267a636553533971e Mon Sep 17 00:00:00 2001 From: Andrzej Bakun Date: Sun, 14 Apr 2024 21:06:59 +0200 Subject: [PATCH] feat: add nuget feed as part of the solution (#118) --- .github/action.yml | 23 +++++++++ .../chapter-3-contracts-workflow.yml | 44 +++++++++--------- .github/workflows/chapter-3-workflow.yml | 36 +++++++------- .../chapter-4-contracts-workflow.yml | 36 +++++++------- .github/workflows/chapter-4-workflow.yml | 36 +++++++------- Assets/nuget-feed-credentials-vs.png | Bin 0 -> 13691 bytes Assets/nuget_feed_credentials_rider.png | Bin 0 -> 10958 bytes .../Fitnet.Contracts/Src/nuget.config | 17 +++++++ .../Fitnet/Src/nuget.config | 17 +++++++ Chapter-3-microservice-extraction/README.adoc | 37 ++++++++++++--- .../Fitnet.Contracts/Src/nuget.config | 16 +++++++ .../Fitnet/Src/nuget.config | 17 +++++++ .../README.adoc | 37 ++++++++++++--- 13 files changed, 224 insertions(+), 92 deletions(-) create mode 100644 .github/action.yml create mode 100644 Assets/nuget-feed-credentials-vs.png create mode 100644 Assets/nuget_feed_credentials_rider.png create mode 100644 Chapter-3-microservice-extraction/Fitnet.Contracts/Src/nuget.config create mode 100644 Chapter-3-microservice-extraction/Fitnet/Src/nuget.config create mode 100644 Chapter-4-applying-tactical-domain-driven-design/Fitnet.Contracts/Src/nuget.config create mode 100644 Chapter-4-applying-tactical-domain-driven-design/Fitnet/Src/nuget.config diff --git a/.github/action.yml b/.github/action.yml new file mode 100644 index 00000000..a6c5f843 --- /dev/null +++ b/.github/action.yml @@ -0,0 +1,23 @@ +name: Add Evolutionary Architecture Nuget Source +description: Remove a default Evolutionary Architecture nuget source and add with credentials +inputs: + github-token: + description: GitHub token + required: true + owner: + description: Repository owner + required: true + path: + description: "Path to the directory" + required: true +runs: + using: "composite" + steps: + - name: Add Authorized Evolutionary Architecture Nuget Source + run: | + cd ${{ github.workspace }}/${{ inputs.path }} + NugetSourceName="evolutionaryArchitecture" + dotnet nuget remove source $NugetSourceName + dotnet nuget add source --username ${{ inputs.owner }} --password ${{ inputs.github-token }} --store-password-in-clear-text --name $NugetSourceName "https://nuget.pkg.github.com/${{ github.repository_owner }}/index.json" + dotnet nuget list source + shell: bash \ No newline at end of file diff --git a/.github/workflows/chapter-3-contracts-workflow.yml b/.github/workflows/chapter-3-contracts-workflow.yml index 6320a225..6cba1ac4 100644 --- a/.github/workflows/chapter-3-contracts-workflow.yml +++ b/.github/workflows/chapter-3-contracts-workflow.yml @@ -1,24 +1,24 @@ name: Chapter 3 Contracts on: push: - branches: [ "main" ] + branches: ["main"] paths: - - 'Chapter-3-microservice-extraction/Fitnet.Contracts/Src/**' + - "Chapter-3-microservice-extraction/Fitnet.Contracts/Src/**" pull_request: - branches: [ "main" ] + branches: ["main"] paths: - - 'Chapter-3-microservice-extraction/Fitnet.Contracts/Src/**' + - "Chapter-3-microservice-extraction/Fitnet.Contracts/Src/**" env: - CHAPTER_DIR: 'Chapter-3-microservice-extraction/Fitnet.Contracts/Src' + CHAPTER_DIR: "Chapter-3-microservice-extraction/Fitnet.Contracts/Src" -jobs: +jobs: build: defaults: run: working-directory: ${{ env.CHAPTER_DIR }} runs-on: ubuntu-latest - + name: Build steps: - uses: actions/checkout@v3 @@ -26,18 +26,17 @@ jobs: uses: actions/setup-dotnet@v3 with: dotnet-version: 8.0.x - - name: Add GitHub NuGet Source - run: | - dotnet nuget add source --username $OWNER --password $GITHUB_TOKEN --store-password-in-clear-text --name github "https://nuget.pkg.github.com/$OWNER/index.json" - dotnet nuget list source - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - OWNER: ${{ github.repository_owner }} + - name: Add Evolutionary Architecture Nuget Source + uses: evolutionary-architecture/evolutionary-architecture-by-example/.github@feature/nuget_config + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + owner: ${{ github.repository_owner }} + path: ${{ env.CHAPTER_DIR }} - name: Restore dependencies run: dotnet restore - name: Build run: dotnet build --no-restore - + test: defaults: run: @@ -51,14 +50,13 @@ jobs: uses: actions/setup-dotnet@v3 with: dotnet-version: 8.0.x - - name: Add GitHub NuGet Source - run: | - dotnet nuget add source --username $OWNER --password $GITHUB_TOKEN --store-password-in-clear-text --name github "https://nuget.pkg.github.com/$OWNER/index.json" - dotnet nuget list source - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - OWNER: ${{ github.repository_owner }} + - name: Add Evolutionary Architecture Nuget Source + uses: evolutionary-architecture/evolutionary-architecture-by-example/.github@feature/nuget_config + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + owner: ${{ github.repository_owner }} + path: ${{ env.CHAPTER_DIR }} - name: Restore dependencies run: dotnet restore - name: Test - run: dotnet test + run: dotnet test \ No newline at end of file diff --git a/.github/workflows/chapter-3-workflow.yml b/.github/workflows/chapter-3-workflow.yml index a5e20c8a..8d26ec54 100644 --- a/.github/workflows/chapter-3-workflow.yml +++ b/.github/workflows/chapter-3-workflow.yml @@ -2,16 +2,16 @@ name: Chapter 3 Modular Monolith workflow on: push: - branches: [ "main" ] + branches: ["main"] paths: - - 'Chapter-3-microservice-extraction/Fitnet/Src/**' + - "Chapter-3-microservice-extraction/Fitnet/Src/**" pull_request: - branches: [ "main" ] + branches: ["main"] paths: - - 'Chapter-3-microservice-extraction/Fitnet/Src/**' + - "Chapter-3-microservice-extraction/Fitnet/Src/**" env: - CHAPTER_DIR: 'Chapter-3-microservice-extraction/Fitnet/Src' + CHAPTER_DIR: "Chapter-3-microservice-extraction/Fitnet/Src" jobs: build: @@ -27,13 +27,12 @@ jobs: uses: actions/setup-dotnet@v3 with: dotnet-version: 8.0.x - - name: Add GitHub NuGet Source - run: | - dotnet nuget add source --username $OWNER --password $GITHUB_TOKEN --store-password-in-clear-text --name github "https://nuget.pkg.github.com/$OWNER/index.json" - dotnet nuget list source - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - OWNER: ${{ github.repository_owner }} + - name: Add Evolutionary Architecture Nuget Source + uses: evolutionary-architecture/evolutionary-architecture-by-example/.github@feature/nuget_config + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + owner: ${{ github.repository_owner }} + path: ${{ env.CHAPTER_DIR }} - name: Restore dependencies run: dotnet restore - name: Build @@ -52,13 +51,12 @@ jobs: uses: actions/setup-dotnet@v3 with: dotnet-version: 8.0.x - - name: Add GitHub NuGet Source - run: | - dotnet nuget add source --username $OWNER --password $GITHUB_TOKEN --store-password-in-clear-text --name github "https://nuget.pkg.github.com/$OWNER/index.json" - dotnet nuget list source - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - OWNER: ${{ github.repository_owner }} + - name: Add Evolutionary Architecture Nuget Source + uses: evolutionary-architecture/evolutionary-architecture-by-example/.github@feature/nuget_config + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + owner: ${{ github.repository_owner }} + path: ${{ env.CHAPTER_DIR }} - name: Restore dependencies run: dotnet restore - name: Test diff --git a/.github/workflows/chapter-4-contracts-workflow.yml b/.github/workflows/chapter-4-contracts-workflow.yml index 8b012e37..d29f7957 100644 --- a/.github/workflows/chapter-4-contracts-workflow.yml +++ b/.github/workflows/chapter-4-contracts-workflow.yml @@ -1,16 +1,16 @@ name: Chapter 4 Contracts on: push: - branches: [ "main" ] + branches: ["main"] paths: - - 'Chapter-4-applying-tactical-domain-driven-design/Fitnet.Contracts/Src/**' + - "Chapter-4-applying-tactical-domain-driven-design/Fitnet.Contracts/Src/**" pull_request: - branches: [ "main" ] + branches: ["main"] paths: - - 'Chapter-4-applying-tactical-domain-driven-design/Fitnet.Contracts/Src/**' + - "Chapter-4-applying-tactical-domain-driven-design/Fitnet.Contracts/Src/**" env: - CHAPTER_DIR: 'Chapter-4-applying-tactical-domain-driven-design/Fitnet.Contracts/Src' + CHAPTER_DIR: "Chapter-4-applying-tactical-domain-driven-design/Fitnet.Contracts/Src" jobs: build: @@ -26,13 +26,12 @@ jobs: uses: actions/setup-dotnet@v3 with: dotnet-version: 8.0.x - - name: Add GitHub NuGet Source - run: | - dotnet nuget add source --username $OWNER --password $GITHUB_TOKEN --store-password-in-clear-text --name github "https://nuget.pkg.github.com/$OWNER/index.json" - dotnet nuget list source - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - OWNER: ${{ github.repository_owner }} + - name: Add Evolutionary Architecture Nuget Source + uses: evolutionary-architecture/evolutionary-architecture-by-example/.github@feature/nuget_config + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + owner: ${{ github.repository_owner }} + path: ${{ env.CHAPTER_DIR }} - name: Restore dependencies run: dotnet restore - name: Build @@ -51,13 +50,12 @@ jobs: uses: actions/setup-dotnet@v3 with: dotnet-version: 8.0.x - - name: Add GitHub NuGet Source - run: | - dotnet nuget add source --username $OWNER --password $GITHUB_TOKEN --store-password-in-clear-text --name github "https://nuget.pkg.github.com/$OWNER/index.json" - dotnet nuget list source - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - OWNER: ${{ github.repository_owner }} + - name: Add Evolutionary Architecture Nuget Source + uses: evolutionary-architecture/evolutionary-architecture-by-example/.github@feature/nuget_config + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + owner: ${{ github.repository_owner }} + path: ${{ env.CHAPTER_DIR }} - name: Restore dependencies run: dotnet restore - name: Test diff --git a/.github/workflows/chapter-4-workflow.yml b/.github/workflows/chapter-4-workflow.yml index 008a6b7d..73093d9e 100644 --- a/.github/workflows/chapter-4-workflow.yml +++ b/.github/workflows/chapter-4-workflow.yml @@ -2,16 +2,16 @@ name: Chapter 4 Modular Monolith workflow on: push: - branches: [ "main" ] + branches: ["main"] paths: - - 'Chapter-4-applying-tactical-domain-driven-design/Fitnet/Src/**' + - "Chapter-4-applying-tactical-domain-driven-design/Fitnet/Src/**" pull_request: - branches: [ "main" ] + branches: ["main"] paths: - - 'Chapter-4-applying-tactical-domain-driven-design/Fitnet/Src/**' + - "Chapter-4-applying-tactical-domain-driven-design/Fitnet/Src/**" env: - CHAPTER_DIR: 'Chapter-4-applying-tactical-domain-driven-design/Fitnet/Src' + CHAPTER_DIR: "Chapter-4-applying-tactical-domain-driven-design/Fitnet/Src" jobs: build: @@ -27,13 +27,12 @@ jobs: uses: actions/setup-dotnet@v3 with: dotnet-version: 8.0.x - - name: Add GitHub NuGet Source - run: | - dotnet nuget add source --username $OWNER --password $GITHUB_TOKEN --store-password-in-clear-text --name github "https://nuget.pkg.github.com/$OWNER/index.json" - dotnet nuget list source - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - OWNER: ${{ github.repository_owner }} + - name: Add Evolutionary Architecture Nuget Source + uses: evolutionary-architecture/evolutionary-architecture-by-example/.github@feature/nuget_config + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + owner: ${{ github.repository_owner }} + path: ${{ env.CHAPTER_DIR }} - name: Restore dependencies run: dotnet restore - name: Build @@ -52,13 +51,12 @@ jobs: uses: actions/setup-dotnet@v3 with: dotnet-version: 8.0.x - - name: Add GitHub NuGet Source - run: | - dotnet nuget add source --username $OWNER --password $GITHUB_TOKEN --store-password-in-clear-text --name github "https://nuget.pkg.github.com/$OWNER/index.json" - dotnet nuget list source - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - OWNER: ${{ github.repository_owner }} + - name: Add Evolutionary Architecture Nuget Source + uses: evolutionary-architecture/evolutionary-architecture-by-example/.github@feature/nuget_config + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + owner: ${{ github.repository_owner }} + path: ${{ env.CHAPTER_DIR }} - name: Restore dependencies run: dotnet restore - name: Test diff --git a/Assets/nuget-feed-credentials-vs.png b/Assets/nuget-feed-credentials-vs.png new file mode 100644 index 0000000000000000000000000000000000000000..65dc1b6998d7abc62cbd6791fcc230ebbe89ffe6 GIT binary patch literal 13691 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 + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Chapter-3-microservice-extraction/Fitnet/Src/nuget.config b/Chapter-3-microservice-extraction/Fitnet/Src/nuget.config new file mode 100644 index 00000000..d4fe5249 --- /dev/null +++ b/Chapter-3-microservice-extraction/Fitnet/Src/nuget.config @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Chapter-3-microservice-extraction/README.adoc b/Chapter-3-microservice-extraction/README.adoc index 0862f60c..361bf0d0 100644 --- a/Chapter-3-microservice-extraction/README.adoc +++ b/Chapter-3-microservice-extraction/README.adoc @@ -154,13 +154,38 @@ That's it! You should now be able to run the application using either one of the === Building and debugging code in Rider IDE -Before you build or debug code in `Rider` environment, you first have to configure artifactory to allow to download packages for `Common` which is a part of this repository: +Before you build or debug code in `Rider` or `Visual Studio` IDE, you first have to provide your user name and previously generated PAT for artifactory to download packages for `Common` which is a part of this repository. When you load the solution, your IDE should request the credentials: -- 1. Open `JetBrains Rider` and navigate to `File > Settings > NuGet > Sources`. -- 2. Click the `+` button to add a new package source. -- 3. In the `Add Package Source` window, provide Artifactory URL in the `https://nuget.pkg.github.com/evolutionary-architecture/index.json`, fill your Github Username and PAT. -- 4. Click `OK` to confirm the new package source. -- 5. Make sure your new package source is enabled and then click `OK` to close the `Settings` window. + - Rider: +++++ +
+rider nuget feed credentials request +
+++++ + - Visual Studio: +++++ +
+vs nuget feed credentials request +
+++++ + +In case of any issues, you can add nuget feed manually: + +- `Rider` + 1. Open `JetBrains Rider`, right click on the solution in the solution explorer and click `Manage NuGet Packages`. + 1. Click on the `Sources` tab. + 1. Click the `+` button to add a new package source. + 1. In the `Add Package Source` window, provide Artifactory URL in the `https://nuget.pkg.github.com/evolutionary-architecture/index.json`, fill your Github Username and PAT. + 1. Click `OK` to confirm the new package source. + 1. Make sure your new package source is enabled and then click `OK` to close the `Settings` window. + 1. You sould be promted for user name and password (PAT). +- `Visual Studio` + 1. Open `Microsoft Visual Studio`, right click on the solution in the solution explorer and click `Manage NuGet Packages for Solution`. + 1. Click on the `gears` icon. + 1. Click the `+` button to add a new package source. + 1. Set the package name and se the source to Artifactory URL `https://nuget.pkg.github.com/evolutionary-architecture/index.json`. + 1. You sould be promted for user name and password (PAT). + 1. Click `OK` to confirm the new package source. You should now be able to restore and download the EvolutionaryArchitecture nuget packages from your Artifactory source within Rider. diff --git a/Chapter-4-applying-tactical-domain-driven-design/Fitnet.Contracts/Src/nuget.config b/Chapter-4-applying-tactical-domain-driven-design/Fitnet.Contracts/Src/nuget.config new file mode 100644 index 00000000..e442d2e1 --- /dev/null +++ b/Chapter-4-applying-tactical-domain-driven-design/Fitnet.Contracts/Src/nuget.config @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Chapter-4-applying-tactical-domain-driven-design/Fitnet/Src/nuget.config b/Chapter-4-applying-tactical-domain-driven-design/Fitnet/Src/nuget.config new file mode 100644 index 00000000..d4fe5249 --- /dev/null +++ b/Chapter-4-applying-tactical-domain-driven-design/Fitnet/Src/nuget.config @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Chapter-4-applying-tactical-domain-driven-design/README.adoc b/Chapter-4-applying-tactical-domain-driven-design/README.adoc index 5a5c11af..bac5a419 100644 --- a/Chapter-4-applying-tactical-domain-driven-design/README.adoc +++ b/Chapter-4-applying-tactical-domain-driven-design/README.adoc @@ -88,13 +88,38 @@ That's it! You should now be able to run the application using either one of the === Building and debugging code in Rider IDE -Before you build or debug code in `Rider` environment, you first have to configure artifactory to allow to download packages for `Common` which is a part of this repository: +Before you build or debug code in `Rider` or `Visual Studio` IDE, you first have to provide your user name and previously generated PAT for artifactory to download packages for `Common` which is a part of this repository. When you load the solution, your IDE should request the credentials: -- 1. Open `JetBrains Rider` and navigate to `File > Settings > NuGet > Sources`. -- 2. Click the `+` button to add a new package source. -- 3. In the `Add Package Source` window, provide Artifactory URL in the `https://nuget.pkg.github.com/evolutionary-architecture/index.json`, fill your Github Username and PAT. -- 4. Click `OK` to confirm the new package source. -- 5. Make sure your new package source is enabled and then click `OK` to close the `Settings` window. + - Rider: +++++ +
+rider nuget feed credentials request +
+++++ + - Visual Studio: +++++ +
+vs nuget feed credentials request +
+++++ + +In case of any issues, you can add nuget feed manually: + +- `Rider` + 1. Open `JetBrains Rider`, right click on the solution in the solution explorer and click `Manage NuGet Packages`. + 1. Click on the `Sources` tab. + 1. Click the `+` button to add a new package source. + 1. In the `Add Package Source` window, provide Artifactory URL in the `https://nuget.pkg.github.com/evolutionary-architecture/index.json`, fill your Github Username and PAT. + 1. Click `OK` to confirm the new package source. + 1. Make sure your new package source is enabled and then click `OK` to close the `Settings` window. + 1. You sould be promted for user name and password (PAT). +- `Visual Studio` + 1. Open `Microsoft Visual Studio`, right click on the solution in the solution explorer and click `Manage NuGet Packages for Solution`. + 1. Click on the `gears` icon. + 1. Click the `+` button to add a new package source. + 1. Set the package name and se the source to Artifactory URL `https://nuget.pkg.github.com/evolutionary-architecture/index.json`. + 1. You sould be promted for user name and password (PAT). + 1. Click `OK` to confirm the new package source. You should now be able to restore and download the EvolutionaryArchitecture nuget packages from your Artifactory source within Rider.