From bb0d4dc38e8923e3460061b2710c6cf6928aa698 Mon Sep 17 00:00:00 2001 From: Bryan Jonker Date: Tue, 20 Jan 2026 09:36:33 -0600 Subject: [PATCH 1/4] Reset workflow --- ...app-prod-course.yml => app_production.yml} | 14 +++-- ...fun-prod-course.yml => fun_production.yml} | 12 ++-- .github/workflows/wigg-app-staging-course.yml | 57 ------------------- .github/workflows/wigg-fun-staging-course.yml | 43 -------------- ProgramInformationV2.sln | 8 +-- README.md | 7 --- 6 files changed, 19 insertions(+), 122 deletions(-) rename .github/workflows/{wigg-app-prod-course.yml => app_production.yml} (75%) rename .github/workflows/{wigg-fun-prod-course.yml => fun_production.yml} (87%) delete mode 100644 .github/workflows/wigg-app-staging-course.yml delete mode 100644 .github/workflows/wigg-fun-staging-course.yml diff --git a/.github/workflows/wigg-app-prod-course.yml b/.github/workflows/app_production.yml similarity index 75% rename from .github/workflows/wigg-app-prod-course.yml rename to .github/workflows/app_production.yml index 6d3ad3b..aba85f8 100644 --- a/.github/workflows/wigg-app-prod-course.yml +++ b/.github/workflows/app_production.yml @@ -9,6 +9,9 @@ on: - main workflow_dispatch: +env: + DOTNET_VERSION: '8.0.x' # set this to the dotnet version to use + jobs: build: runs-on: windows-latest @@ -16,17 +19,17 @@ jobs: steps: - uses: actions/checkout@v4 - - name: Set up .NET Core + - name: Setup DotNet ${{ env.DOTNET_VERSION }} Environment uses: actions/setup-dotnet@v1 with: - dotnet-version: '8.x' + dotnet-version: ${{ env.DOTNET_VERSION }} include-prerelease: true - name: Build with dotnet run: dotnet build --configuration Release - name: dotnet publish - run: dotnet publish -c Release -o ${{env.DOTNET_ROOT}}/myapp + run: dotnet publish ProgramInformationV2 -c Release -r linux-x64 --property:PublishDir=${{env.DOTNET_ROOT}}/myapp - name: Upload artifact for deployment job uses: actions/upload-artifact@v4 @@ -51,6 +54,7 @@ jobs: id: deploy-to-webapp uses: azure/webapps-deploy@v2 with: - app-name: 'wigg-course-infra-winapp01' + app-name: itp-app-programrepository + package: . publish-profile: ${{ secrets.AZURE_WEB_PUBLISH_PROFILE_PRODUCTION }} - package: . \ No newline at end of file + slot-name: 'deploy' diff --git a/.github/workflows/wigg-fun-prod-course.yml b/.github/workflows/fun_production.yml similarity index 87% rename from .github/workflows/wigg-fun-prod-course.yml rename to .github/workflows/fun_production.yml index e8366e3..7ef9d72 100644 --- a/.github/workflows/wigg-fun-prod-course.yml +++ b/.github/workflows/fun_production.yml @@ -12,10 +12,10 @@ on: env: AZURE_FUNCTIONAPP_PACKAGE_PATH: 'ProgramInformationV2.Function' # set this to the path to your web app project, defaults to the repository root DOTNET_VERSION: '8.0.x' # set this to the dotnet version to use - + jobs: build-and-deploy: - runs-on: windows-latest + runs-on: ubuntu-latest steps: - name: 'Checkout GitHub Action' @@ -25,18 +25,20 @@ jobs: uses: actions/setup-dotnet@v1 with: dotnet-version: ${{ env.DOTNET_VERSION }} + include-prerelease: true - name: 'Resolve Project Dependencies Using Dotnet' shell: pwsh run: | pushd './${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}' - dotnet build --configuration Release --output ./output + dotnet build --configuration Release --output ./output -r linux-x64 popd - name: 'Run Azure Functions Action' uses: Azure/functions-action@v1 id: fa with: - app-name: 'wigg-course-infra-funapp01' + app-name: 'itp-function-programrepository' package: '${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}/output' - publish-profile: ${{ secrets.AZURE_FUNCTION_PUBLISH_PROFILE_PRODUCTION }} \ No newline at end of file + publish-profile: ${{ secrets.AZURE_FUNCTION_PUBLISH_PROFILE_PRODUCTION }} + slot-name: 'deploy' diff --git a/.github/workflows/wigg-app-staging-course.yml b/.github/workflows/wigg-app-staging-course.yml deleted file mode 100644 index 6ac00ba..0000000 --- a/.github/workflows/wigg-app-staging-course.yml +++ /dev/null @@ -1,57 +0,0 @@ -# Docs for the Azure Web Apps Deploy action: https://github.com/Azure/webapps-deploy -# More GitHub Actions for Azure: https://github.com/Azure/actions - -name: Staging WIGG Build and deploy ASP.Net Core app to Azure Web App - -on: - push: - branches: - - develop - workflow_dispatch: - -jobs: - build: - runs-on: windows-latest - - steps: - - uses: actions/checkout@v4 - - - name: Set up .NET Core - uses: actions/setup-dotnet@v1 - with: - dotnet-version: '8.x' - include-prerelease: true - - - name: Build with dotnet - run: dotnet build --configuration Release - - - name: dotnet publish - run: dotnet publish -c Release -o ${{env.DOTNET_ROOT}}/myapp - - - name: Upload artifact for deployment job - uses: actions/upload-artifact@v4 - with: - name: .net-app - path: ${{env.DOTNET_ROOT}}/myapp - - deploy: - runs-on: windows-latest - needs: build - environment: - name: 'Production' - url: ${{ steps.deploy-to-webapp.outputs.webapp-url }} - - steps: - - name: Download artifact from build job - uses: actions/download-artifact@v4 - with: - name: .net-app - - - name: Deploy to Azure Web App - id: deploy-to-webapp - uses: azure/webapps-deploy@v2 - with: - app-name: 'wigg-course-infra-winapp01' - slot-name: 'staging' - publish-profile: ${{ secrets.AZURE_WEB_PUBLISH_PROFILE_STAGING }} - package: . \ No newline at end of file diff --git a/.github/workflows/wigg-fun-staging-course.yml b/.github/workflows/wigg-fun-staging-course.yml deleted file mode 100644 index 860c382..0000000 --- a/.github/workflows/wigg-fun-staging-course.yml +++ /dev/null @@ -1,43 +0,0 @@ -# Docs for the Azure Web Apps Deploy action: https://github.com/azure/functions-action -# More GitHub Actions for Azure: https://github.com/Azure/actions - -name: Staging WIGG Build and deploy ASP.Net Core app to Azure Function App - -on: - push: - branches: - - develop - workflow_dispatch: - -env: - AZURE_FUNCTIONAPP_PACKAGE_PATH: 'ProgramInformationV2.Function' # set this to the path to your web app project, defaults to the repository root - DOTNET_VERSION: '8.0.x' # set this to the dotnet version to use - -jobs: - build-and-deploy: - runs-on: windows-latest - - steps: - - name: 'Checkout GitHub Action' - uses: actions/checkout@v4 - - - name: Setup DotNet ${{ env.DOTNET_VERSION }} Environment - uses: actions/setup-dotnet@v1 - with: - dotnet-version: ${{ env.DOTNET_VERSION }} - - - name: 'Resolve Project Dependencies Using Dotnet' - shell: pwsh - run: | - pushd './${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}' - dotnet build --configuration Release --output ./output - popd - - - name: 'Run Azure Functions Action' - uses: Azure/functions-action@v1 - id: fa - with: - app-name: 'wigg-course-infra-funapp01' - slot-name: 'staging' - package: '${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}/output' - publish-profile: ${{ secrets.AZURE_FUNCTION_PUBLISH_PROFILE_STAGING }} \ No newline at end of file diff --git a/ProgramInformationV2.sln b/ProgramInformationV2.sln index cf672ff..e1917a7 100644 --- a/ProgramInformationV2.sln +++ b/ProgramInformationV2.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 18 -VisualStudioVersion = 18.1.11312.151 +VisualStudioVersion = 18.1.11312.151 d18.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ProgramInformationV2", "ProgramInformationV2\ProgramInformationV2.csproj", "{B547452F-BE87-4536-80C0-230EA18AD030}" EndProject @@ -13,11 +13,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ProgramInformationV2.Functi EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{64244983-1B95-4158-AAD6-313765A46B73}" ProjectSection(SolutionItems) = preProject + .github\workflows\app_production.yml = .github\workflows\app_production.yml + .github\workflows\fun_production.yml = .github\workflows\fun_production.yml README.md = README.md - .github\workflows\wigg-app-prod-course.yml = .github\workflows\wigg-app-prod-course.yml - .github\workflows\wigg-app-staging-course.yml = .github\workflows\wigg-app-staging-course.yml - .github\workflows\wigg-fun-prod-course.yml = .github\workflows\wigg-fun-prod-course.yml - .github\workflows\wigg-fun-staging-course.yml = .github\workflows\wigg-fun-staging-course.yml EndProjectSection EndProject Global diff --git a/README.md b/README.md index 01c049d..a58260b 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,6 @@ This is the new Program Information for IT Partners, used to organize programs, This consists of five applications: * **ProgramInformationV2**: The Blazor server application to handle back-end functions. https://programcourse.itpartners.illinois.edu * **ProgramInformationV2.Function**: The Function Application for the API. https://programcourseapi.itpartners.illinois.edu -* **ProgramInformationV2.LoadFromEdw**: A console application used to batch load items from EDW * **ProgramInformationV2.Data**: The data access for all the processes * **ProgramInformationV2.Search**: The data access for searching (accessing AWS OpenSearch Service) @@ -37,12 +36,6 @@ Make sure the ProgramInformationV2 project is set up as the startup project befo If you run into the issue "The certificate chain was issued by an authority that is not trusted.", then add **TrustServerCertificate=True** to the connection string. -### Console App - -The console application is used to run batches of imports manually. This probably will be done once a semester. The two types of import batches are: -* Course Information. This uses the https://courses.illinois.edu/cisapp/explorer/schedule/ application to get courses by rubric and load them. This overwrites existing course information in the system. -* Faculty Names. This takes a list of names and does a mass change of faculty names to add NetIDs and URLs. The information can be pulled from the directory API using the attached HTML page. - ## Code to delete the test items in the OpenSearch Service `` From 00f69616073579fe193f2c0cc7060e3849eaf53a Mon Sep 17 00:00:00 2001 From: Bryan Jonker Date: Thu, 22 Jan 2026 17:25:01 -0600 Subject: [PATCH 2/4] Add notes title and plan of study intro --- ProgramInformationV2.Data/FieldList/CredentialGroup.cs | 4 ++++ ProgramInformationV2.Search/Models/Credential.cs | 7 +++++-- .../Components/Pages/Credential/CourseList.razor | 5 +++++ .../Components/Pages/Credential/CourseList.razor.cs | 6 ++++++ .../Components/Pages/Credential/Overview.razor | 1 + 5 files changed, 21 insertions(+), 2 deletions(-) diff --git a/ProgramInformationV2.Data/FieldList/CredentialGroup.cs b/ProgramInformationV2.Data/FieldList/CredentialGroup.cs index f1f2c15..eeb2702 100644 --- a/ProgramInformationV2.Data/FieldList/CredentialGroup.cs +++ b/ProgramInformationV2.Data/FieldList/CredentialGroup.cs @@ -11,6 +11,7 @@ public CredentialGroup() { [FieldType.General] = "General information about the credential.", [FieldType.Link] = "Control what links, images, and videos are added to the credential page.", [FieldType.Overview] = "This information will be displayed on the credential page.", + [FieldType.CourseList] = "This information will be displayed with the typical plan of study.", [FieldType.Transcriptable] = "This information shows transcriptable information (like majors, minors, etc.).", [FieldType.Technical] = "Technical details used for internal purposes." }; @@ -28,6 +29,9 @@ public CredentialGroup() { new() { Title = "Credential Image", CategoryType = CategoryType.Credential, FieldType = FieldType.Link, InitialDescription = "This should link to an image that you would like featured on the program finder. You must add alternative text when linking an image." }, new() { Title = "Credential Image Alt Text", CategoryType = CategoryType.Credential, FieldType = FieldType.Link, InitialDescription = "Alternative text for the image." }, new() { Title = "Description", CategoryType = CategoryType.Credential, FieldType = FieldType.Overview, InitialDescription = "This text should describe the credential. It will be on the credential page." }, + new() { Title = "Program Notes Title", CategoryType = CategoryType.Credential, FieldType = FieldType.Overview, InitialDescription = "This is a way to overwrite the program notes title, if you need to use a more descriptive term than 'Notes'." }, + new() { Title = "Program Notes", CategoryType = CategoryType.Credential, FieldType = FieldType.Overview, InitialDescription = "This text has generic notes about the program, listed at the end of the page. Use this for disclaimers or additional information." }, + new() { Title = "Plan of Study Introduction", CategoryType = CategoryType.Credential, FieldType = FieldType.CourseList, InitialDescription = "This text will be above the plan of study and contains important notes about the plan of study." }, new() { Title = "Is This Credential Transcriptable", CategoryType = CategoryType.Credential, FieldType = FieldType.Transcriptable }, new() { Title = "Transcriptable Name", CategoryType = CategoryType.Credential, FieldType = FieldType.Transcriptable, InitialDescription = "The name the credential will appear as on transcripts." }, new() { Title = "Major Title", CategoryType = CategoryType.Credential, FieldType = FieldType.Transcriptable, }, diff --git a/ProgramInformationV2.Search/Models/Credential.cs b/ProgramInformationV2.Search/Models/Credential.cs index 7f2d60c..a84813b 100644 --- a/ProgramInformationV2.Search/Models/Credential.cs +++ b/ProgramInformationV2.Search/Models/Credential.cs @@ -1,5 +1,5 @@ -using System.Text.Json; -using OpenSearch.Client; +using OpenSearch.Client; +using System.Text.Json; namespace ProgramInformationV2.Search.Models { @@ -49,6 +49,9 @@ public Credential() { public string MinorTitle { get; set; } = ""; public string Notes { get; set; } = ""; + public string NoteTitle { get; set; } = ""; + + public string PlanOfStudyIntroduction { get; set; } = ""; [Keyword] public string ProgramId { get; set; } = ""; diff --git a/ProgramInformationV2/Components/Pages/Credential/CourseList.razor b/ProgramInformationV2/Components/Pages/Credential/CourseList.razor index 27bd2ac..e197d87 100644 --- a/ProgramInformationV2/Components/Pages/Credential/CourseList.razor +++ b/ProgramInformationV2/Components/Pages/Credential/CourseList.razor @@ -7,6 +7,11 @@

Courses

To add courses to a credential, you must add a requirement set. You may add an existing requirement set or create a new requirement set below.

+

Plan of Study Introduction

+ + +

Chosen Requirement Sets

+ @if (CredentialItem != null && RequirementSetList != null) { @foreach (var requirementset in ChosenRequirementSetList.Select((v, i) => (v, i))) diff --git a/ProgramInformationV2/Components/Pages/Credential/CourseList.razor.cs b/ProgramInformationV2/Components/Pages/Credential/CourseList.razor.cs index 2c1b4c2..ba19f11 100644 --- a/ProgramInformationV2/Components/Pages/Credential/CourseList.razor.cs +++ b/ProgramInformationV2/Components/Pages/Credential/CourseList.razor.cs @@ -4,6 +4,7 @@ using ProgramInformationV2.Components.Layout; using ProgramInformationV2.Data.DataHelpers; using ProgramInformationV2.Data.DataModels; +using ProgramInformationV2.Data.FieldList; using ProgramInformationV2.Data.PageList; using ProgramInformationV2.Search.Getters; using ProgramInformationV2.Search.Models; @@ -13,6 +14,7 @@ namespace ProgramInformationV2.Components.Pages.Credential { public partial class CourseList { private SearchGenericItem _searchGenericItem = default!; + public IEnumerable FieldItems { get; set; } = default!; private string _sourceCode = ""; public List ChosenRequirementSetList { get; set; } = default!; @@ -31,6 +33,9 @@ public partial class CourseList { [Inject] protected CredentialGetter CredentialGetter { get; set; } = default!; + [Inject] + protected FieldManager FieldManager { get; set; } = default!; + [Inject] protected IJSRuntime JsRuntime { get; set; } = default!; @@ -122,6 +127,7 @@ protected override async Task OnInitializedAsync() { } } Layout.SetSidebar(SidebarEnum.Credential, CredentialItem.TitlePlusCredential); + FieldItems = await FieldManager.GetMergedFieldItems(_sourceCode, new CredentialGroup(), FieldType.CourseList); await GetRequirementSet(); await base.OnInitializedAsync(); } diff --git a/ProgramInformationV2/Components/Pages/Credential/Overview.razor b/ProgramInformationV2/Components/Pages/Credential/Overview.razor index 4bf9ff8..6ea5b88 100644 --- a/ProgramInformationV2/Components/Pages/Credential/Overview.razor +++ b/ProgramInformationV2/Components/Pages/Credential/Overview.razor @@ -6,6 +6,7 @@

Overview

+ @if (CredentialItem != null) { From 710cf9d48a5dce13f9a837ed1f27e55e4f1fe344 Mon Sep 17 00:00:00 2001 From: Bryan Jonker Date: Mon, 26 Jan 2026 16:16:12 -0600 Subject: [PATCH 3/4] Fix button, search issue --- .../Getters/ProgramGetter.cs | 2 +- .../Components/Layout/MainLayout.razor | 2 +- .../Components/Layout/SidebarLayout.razor | 2 +- .../Components/Pages/Home.razor | 17 ++++++++--------- 4 files changed, 11 insertions(+), 12 deletions(-) diff --git a/ProgramInformationV2.Search/Getters/ProgramGetter.cs b/ProgramInformationV2.Search/Getters/ProgramGetter.cs index 16f72b9..c980418 100644 --- a/ProgramInformationV2.Search/Getters/ProgramGetter.cs +++ b/ProgramInformationV2.Search/Getters/ProgramGetter.cs @@ -76,7 +76,7 @@ public async Task> GetPrograms(string source, string searc f => departments.Any() ? f.Terms(m => m.Field(fld => fld.DepartmentList).Terms(departments)) : f.MatchAll(), f => skills.Any() ? f.Terms(m => m.Field(fld => fld.SkillList).Terms(skills)) : f.MatchAll()) .Must(m => !string.IsNullOrWhiteSpace(search) ? m.MultiMatch(m => m.Fields(fld => fld.Field("title^10").Field("summarytext^5").Field("description^2").Field("whoshouldapply")).Query(search)) : m.MatchAll()))) - .Sort(srt => string.IsNullOrWhiteSpace(search) ? srt.Ascending(f => f.TitleSortKeyword) : srt.Descending(f => SortSpecialField.Score)) + .Sort(srt => string.IsNullOrWhiteSpace(search) ? srt.Ascending(f => f.TitleSortKeyword) : srt.Descending(SortSpecialField.Score)) .Suggest(a => a.Phrase("didyoumean", p => p.Text(search).Field(fld => fld.Title)))); LogDebug(response); diff --git a/ProgramInformationV2/Components/Layout/MainLayout.razor b/ProgramInformationV2/Components/Layout/MainLayout.razor index 14753dc..9d05a17 100644 --- a/ProgramInformationV2/Components/Layout/MainLayout.razor +++ b/ProgramInformationV2/Components/Layout/MainLayout.razor @@ -26,7 +26,7 @@ IT Partners Program / Course Repository \ No newline at end of file diff --git a/ProgramInformationV2/Components/Layout/SidebarLayout.razor b/ProgramInformationV2/Components/Layout/SidebarLayout.razor index 273d3c8..358e2d1 100644 --- a/ProgramInformationV2/Components/Layout/SidebarLayout.razor +++ b/ProgramInformationV2/Components/Layout/SidebarLayout.razor @@ -42,7 +42,7 @@ IT Partners Program / Course Repository diff --git a/ProgramInformationV2/Components/Pages/Home.razor b/ProgramInformationV2/Components/Pages/Home.razor index eb55adb..e3057ff 100644 --- a/ProgramInformationV2/Components/Pages/Home.razor +++ b/ProgramInformationV2/Components/Pages/Home.razor @@ -21,13 +21,13 @@

Choose a Source

You have access to multiple sources, so you must choose a source before editing programs, credentials, etc.

- +
} @@ -92,7 +92,7 @@ else if (Sources != null)

Choose another Source

You have access to multiple sources, so you may choose a different source here.

- @foreach (var source in Sources) { @@ -103,5 +103,4 @@ else if (Sources != null) } - } From e12de51658109a670580a4a20256399c7fe990ef Mon Sep 17 00:00:00 2001 From: Bryan Jonker Date: Wed, 28 Jan 2026 09:53:48 -0600 Subject: [PATCH 4/4] Initial transfer from IT Partners repo --- ...roduction.yml => wigg-app-prod-course.yml} | 14 ++--- .github/workflows/wigg-app-staging-course.yml | 57 +++++++++++++++++++ ...roduction.yml => wigg-fun-prod-course.yml} | 12 ++-- .github/workflows/wigg-fun-staging-course.yml | 43 ++++++++++++++ ProgramInformationV2.sln | 4 +- README.md | 6 +- 6 files changed, 115 insertions(+), 21 deletions(-) rename .github/workflows/{app_production.yml => wigg-app-prod-course.yml} (75%) create mode 100644 .github/workflows/wigg-app-staging-course.yml rename .github/workflows/{fun_production.yml => wigg-fun-prod-course.yml} (87%) create mode 100644 .github/workflows/wigg-fun-staging-course.yml diff --git a/.github/workflows/app_production.yml b/.github/workflows/wigg-app-prod-course.yml similarity index 75% rename from .github/workflows/app_production.yml rename to .github/workflows/wigg-app-prod-course.yml index aba85f8..6d3ad3b 100644 --- a/.github/workflows/app_production.yml +++ b/.github/workflows/wigg-app-prod-course.yml @@ -9,9 +9,6 @@ on: - main workflow_dispatch: -env: - DOTNET_VERSION: '8.0.x' # set this to the dotnet version to use - jobs: build: runs-on: windows-latest @@ -19,17 +16,17 @@ jobs: steps: - uses: actions/checkout@v4 - - name: Setup DotNet ${{ env.DOTNET_VERSION }} Environment + - name: Set up .NET Core uses: actions/setup-dotnet@v1 with: - dotnet-version: ${{ env.DOTNET_VERSION }} + dotnet-version: '8.x' include-prerelease: true - name: Build with dotnet run: dotnet build --configuration Release - name: dotnet publish - run: dotnet publish ProgramInformationV2 -c Release -r linux-x64 --property:PublishDir=${{env.DOTNET_ROOT}}/myapp + run: dotnet publish -c Release -o ${{env.DOTNET_ROOT}}/myapp - name: Upload artifact for deployment job uses: actions/upload-artifact@v4 @@ -54,7 +51,6 @@ jobs: id: deploy-to-webapp uses: azure/webapps-deploy@v2 with: - app-name: itp-app-programrepository - package: . + app-name: 'wigg-course-infra-winapp01' publish-profile: ${{ secrets.AZURE_WEB_PUBLISH_PROFILE_PRODUCTION }} - slot-name: 'deploy' + package: . \ No newline at end of file diff --git a/.github/workflows/wigg-app-staging-course.yml b/.github/workflows/wigg-app-staging-course.yml new file mode 100644 index 0000000..6ac00ba --- /dev/null +++ b/.github/workflows/wigg-app-staging-course.yml @@ -0,0 +1,57 @@ +# Docs for the Azure Web Apps Deploy action: https://github.com/Azure/webapps-deploy +# More GitHub Actions for Azure: https://github.com/Azure/actions + +name: Staging WIGG Build and deploy ASP.Net Core app to Azure Web App + +on: + push: + branches: + - develop + workflow_dispatch: + +jobs: + build: + runs-on: windows-latest + + steps: + - uses: actions/checkout@v4 + + - name: Set up .NET Core + uses: actions/setup-dotnet@v1 + with: + dotnet-version: '8.x' + include-prerelease: true + + - name: Build with dotnet + run: dotnet build --configuration Release + + - name: dotnet publish + run: dotnet publish -c Release -o ${{env.DOTNET_ROOT}}/myapp + + - name: Upload artifact for deployment job + uses: actions/upload-artifact@v4 + with: + name: .net-app + path: ${{env.DOTNET_ROOT}}/myapp + + deploy: + runs-on: windows-latest + needs: build + environment: + name: 'Production' + url: ${{ steps.deploy-to-webapp.outputs.webapp-url }} + + steps: + - name: Download artifact from build job + uses: actions/download-artifact@v4 + with: + name: .net-app + + - name: Deploy to Azure Web App + id: deploy-to-webapp + uses: azure/webapps-deploy@v2 + with: + app-name: 'wigg-course-infra-winapp01' + slot-name: 'staging' + publish-profile: ${{ secrets.AZURE_WEB_PUBLISH_PROFILE_STAGING }} + package: . \ No newline at end of file diff --git a/.github/workflows/fun_production.yml b/.github/workflows/wigg-fun-prod-course.yml similarity index 87% rename from .github/workflows/fun_production.yml rename to .github/workflows/wigg-fun-prod-course.yml index 7ef9d72..e8366e3 100644 --- a/.github/workflows/fun_production.yml +++ b/.github/workflows/wigg-fun-prod-course.yml @@ -12,10 +12,10 @@ on: env: AZURE_FUNCTIONAPP_PACKAGE_PATH: 'ProgramInformationV2.Function' # set this to the path to your web app project, defaults to the repository root DOTNET_VERSION: '8.0.x' # set this to the dotnet version to use - + jobs: build-and-deploy: - runs-on: ubuntu-latest + runs-on: windows-latest steps: - name: 'Checkout GitHub Action' @@ -25,20 +25,18 @@ jobs: uses: actions/setup-dotnet@v1 with: dotnet-version: ${{ env.DOTNET_VERSION }} - include-prerelease: true - name: 'Resolve Project Dependencies Using Dotnet' shell: pwsh run: | pushd './${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}' - dotnet build --configuration Release --output ./output -r linux-x64 + dotnet build --configuration Release --output ./output popd - name: 'Run Azure Functions Action' uses: Azure/functions-action@v1 id: fa with: - app-name: 'itp-function-programrepository' + app-name: 'wigg-course-infra-funapp01' package: '${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}/output' - publish-profile: ${{ secrets.AZURE_FUNCTION_PUBLISH_PROFILE_PRODUCTION }} - slot-name: 'deploy' + publish-profile: ${{ secrets.AZURE_FUNCTION_PUBLISH_PROFILE_PRODUCTION }} \ No newline at end of file diff --git a/.github/workflows/wigg-fun-staging-course.yml b/.github/workflows/wigg-fun-staging-course.yml new file mode 100644 index 0000000..860c382 --- /dev/null +++ b/.github/workflows/wigg-fun-staging-course.yml @@ -0,0 +1,43 @@ +# Docs for the Azure Web Apps Deploy action: https://github.com/azure/functions-action +# More GitHub Actions for Azure: https://github.com/Azure/actions + +name: Staging WIGG Build and deploy ASP.Net Core app to Azure Function App + +on: + push: + branches: + - develop + workflow_dispatch: + +env: + AZURE_FUNCTIONAPP_PACKAGE_PATH: 'ProgramInformationV2.Function' # set this to the path to your web app project, defaults to the repository root + DOTNET_VERSION: '8.0.x' # set this to the dotnet version to use + +jobs: + build-and-deploy: + runs-on: windows-latest + + steps: + - name: 'Checkout GitHub Action' + uses: actions/checkout@v4 + + - name: Setup DotNet ${{ env.DOTNET_VERSION }} Environment + uses: actions/setup-dotnet@v1 + with: + dotnet-version: ${{ env.DOTNET_VERSION }} + + - name: 'Resolve Project Dependencies Using Dotnet' + shell: pwsh + run: | + pushd './${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}' + dotnet build --configuration Release --output ./output + popd + + - name: 'Run Azure Functions Action' + uses: Azure/functions-action@v1 + id: fa + with: + app-name: 'wigg-course-infra-funapp01' + slot-name: 'staging' + package: '${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}/output' + publish-profile: ${{ secrets.AZURE_FUNCTION_PUBLISH_PROFILE_STAGING }} \ No newline at end of file diff --git a/ProgramInformationV2.sln b/ProgramInformationV2.sln index e1917a7..bd9c963 100644 --- a/ProgramInformationV2.sln +++ b/ProgramInformationV2.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 18 -VisualStudioVersion = 18.1.11312.151 d18.0 +VisualStudioVersion = 18.1.11312.151 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ProgramInformationV2", "ProgramInformationV2\ProgramInformationV2.csproj", "{B547452F-BE87-4536-80C0-230EA18AD030}" EndProject @@ -13,8 +13,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ProgramInformationV2.Functi EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{64244983-1B95-4158-AAD6-313765A46B73}" ProjectSection(SolutionItems) = preProject - .github\workflows\app_production.yml = .github\workflows\app_production.yml - .github\workflows\fun_production.yml = .github\workflows\fun_production.yml README.md = README.md EndProjectSection EndProject diff --git a/README.md b/README.md index a58260b..8db2aa6 100644 --- a/README.md +++ b/README.md @@ -7,11 +7,13 @@ This is the new Program Information for IT Partners, used to organize programs, ## Production location: This consists of five applications: -* **ProgramInformationV2**: The Blazor server application to handle back-end functions. https://programcourse.itpartners.illinois.edu -* **ProgramInformationV2.Function**: The Function Application for the API. https://programcourseapi.itpartners.illinois.edu +* **ProgramInformationV2**: The Blazor server application to handle back-end functions. https://course.wigg.illinois.edu +* **ProgramInformationV2.Function**: The Function Application for the API. https://courseapi.wigg.illinois.edu. * **ProgramInformationV2.Data**: The data access for all the processes * **ProgramInformationV2.Search**: The data access for searching (accessing AWS OpenSearch Service) +Swagger API documentation is available at https://courseapi.wigg.illinois.edu/api/swagger/ui + ## Development location: Currently, none. We do development on local machines, and will host temporary sites when end users need to see development work.