diff --git a/.gitignore b/.gitignore index 0867ef9..08b1ce0 100644 --- a/.gitignore +++ b/.gitignore @@ -225,3 +225,4 @@ Tools/**/*.js.map !jest.config.js output/release-notes.md +output/release-notes.html diff --git a/CommitRangeReleaseNotesTask/task/dist/.taskkey b/CommitRangeReleaseNotesTask/task/dist/.taskkey index 7d9202b..0ab36d5 100644 --- a/CommitRangeReleaseNotesTask/task/dist/.taskkey +++ b/CommitRangeReleaseNotesTask/task/dist/.taskkey @@ -1 +1 @@ -30435434-173e-4a63-8c43-9a886bd70284 \ No newline at end of file +8540612f-cbf9-4737-b3b4-6f49e7425db8 \ No newline at end of file diff --git a/CommitRangeReleaseNotesTask/task/dist/main.js b/CommitRangeReleaseNotesTask/task/dist/main.js index bdcc0f5..7a72f92 100644 --- a/CommitRangeReleaseNotesTask/task/dist/main.js +++ b/CommitRangeReleaseNotesTask/task/dist/main.js @@ -15,6 +15,7 @@ const fs = require("fs"); const CommitUtils_1 = require("./utils/CommitUtils"); const PRUtils_1 = require("./utils/PRUtils"); const TemplateUtils_1 = require("./utils/TemplateUtils"); +const JsonOutput_1 = require("./utils/JsonOutput"); (0, TemplateUtils_1.registerHelpers)(); function GenerateReleaseNotes(startCommit, endCommit, outputFileMarkdown, outputFileHtml, repoRoot, systemAccessToken, project, apiUrl, repositoryId, templateFileMarkdown, templateFileHtml) { return __awaiter(this, void 0, void 0, function* () { @@ -157,7 +158,7 @@ function GenerateReleaseNotes(startCommit, endCommit, outputFileMarkdown, output repositoryId, project }; - //printJson(releaseData); + (0, JsonOutput_1.printJson)(releaseData); (0, TemplateUtils_1.GenerateMarkdownReleaseNotes)(releaseData, outputFileMarkdown, templateFileMarkdown); (0, TemplateUtils_1.GenerateHtmlReleaseNotes)(releaseData, outputFileHtml, templateFileHtml); }); diff --git a/CommitRangeReleaseNotesTask/task/dist/utils/TemplateUtils.js b/CommitRangeReleaseNotesTask/task/dist/utils/TemplateUtils.js index 5e0fc70..8e37680 100644 --- a/CommitRangeReleaseNotesTask/task/dist/utils/TemplateUtils.js +++ b/CommitRangeReleaseNotesTask/task/dist/utils/TemplateUtils.js @@ -28,7 +28,6 @@ const Handlebars = __importStar(require("handlebars")); const fs = require("fs"); const path = require("path"); const tl = require("azure-pipelines-task-lib/task"); -const JsonOutput_1 = require("./JsonOutput"); function registerHelpers() { // GroupBy helper Handlebars.registerHelper('groupBy', function (items, field, options) { @@ -104,23 +103,15 @@ function GenerateMarkdownReleaseNotes(data, outputFile, templateFile) { } exports.GenerateMarkdownReleaseNotes = GenerateMarkdownReleaseNotes; function GenerateHtmlReleaseNotes(data, outputFile, templateFile) { - var _a, _b; console.log('Starting HTML release notes generation...'); // Convert PR descriptions from markdown to HTML const { marked } = require('marked'); - console.log(`Found ${((_a = data.pullRequests) === null || _a === void 0 ? void 0 : _a.length) || 0} pull requests`); - console.log(`Found ${((_b = data.commits) === null || _b === void 0 ? void 0 : _b.length) || 0} commits`); // Convert descriptions in the pullRequests array if (Array.isArray(data.pullRequests) && data.pullRequests.length > 0) { - console.log(`Processing ${data.pullRequests.length} pull requests`); data.pullRequests = data.pullRequests.map(pr => { - console.log(`Checking PR ${pr.id}: has description = ${!!pr.description}, type = ${typeof pr.description}`); if (pr && pr.description != null && typeof pr.description === 'string' && pr.description.trim() !== '') { - console.log(`Converting PR ${pr.id} description from markdown to HTML`); - console.log(`Original (first 200 chars): ${pr.description.substring(0, 200)}`); try { const converted = marked(pr.description); - console.log(`Converted (first 200 chars): ${converted.substring(0, 200)}`); return Object.assign(Object.assign({}, pr), { description: converted }); } catch (error) { @@ -128,29 +119,18 @@ function GenerateHtmlReleaseNotes(data, outputFile, templateFile) { return pr; } } - else { - console.log(`Skipping PR ${pr.id} - no valid description`); - } return pr; }); } - else { - console.log('No pull requests to process'); - } // Convert descriptions in commits.pullRequest objects if (Array.isArray(data.commits) && data.commits.length > 0) { - console.log(`Processing ${data.commits.length} commits`); data.commits = data.commits.map(commit => { if (commit && commit.pullRequest) { - console.log(`Checking commit PR ${commit.pullRequest.id}: has description = ${!!commit.pullRequest.description}, type = ${typeof commit.pullRequest.description}`); if (commit.pullRequest.description != null && typeof commit.pullRequest.description === 'string' && commit.pullRequest.description.trim() !== '') { - console.log(`Converting commit PR ${commit.pullRequest.id} description from markdown to HTML`); - console.log(`Original (first 200 chars): ${commit.pullRequest.description.substring(0, 200)}`); try { const converted = marked(commit.pullRequest.description); - console.log(`Converted (first 200 chars): ${converted.substring(0, 200)}`); return Object.assign(Object.assign({}, commit), { pullRequest: Object.assign(Object.assign({}, commit.pullRequest), { description: converted }) }); } catch (error) { @@ -158,18 +138,10 @@ function GenerateHtmlReleaseNotes(data, outputFile, templateFile) { return commit; } } - else { - console.log(`Skipping commit PR ${commit.pullRequest.id} - no valid description`); - } } return commit; }); } - else { - console.log('No commits to process'); - } - console.log('Markdown conversion complete, proceeding with template generation...'); - (0, JsonOutput_1.printJson)(data); // Get template let template; try { diff --git a/CommitRangeReleaseNotesTask/task/dist/utils/WorkItemUtils.js b/CommitRangeReleaseNotesTask/task/dist/utils/WorkItemUtils.js index f6e1526..a297b43 100644 --- a/CommitRangeReleaseNotesTask/task/dist/utils/WorkItemUtils.js +++ b/CommitRangeReleaseNotesTask/task/dist/utils/WorkItemUtils.js @@ -13,13 +13,6 @@ exports.getWorkItem = void 0; function getWorkItem(workItemId, apiUrl, project, accessToken) { var _a, _b, _c, _d; return __awaiter(this, void 0, void 0, function* () { - const fields = [ - "System.Title", - "System.WorkItemType", - "System.AssignedTo", - "System.Description" - ]; - // fields=${fields.join(',')}& const url = `${apiUrl}/${project}/_apis/wit/workitems/${workItemId}?api-version=7.1&$expand=ALL`; console.log(`Fetching work item ${workItemId} from ${url}`); try { diff --git a/CommitRangeReleaseNotesTask/task/task.json b/CommitRangeReleaseNotesTask/task/task.json index da9c7ab..4438375 100644 --- a/CommitRangeReleaseNotesTask/task/task.json +++ b/CommitRangeReleaseNotesTask/task/task.json @@ -33,7 +33,7 @@ "name": "outputFileMarkdown", "type": "filePath", "label": "Output File - Markdown", - "defaultValue": "$(Build.ArtifactStagingDirectory)/ReleaseNotes.md", + "defaultValue": "$(Build.ArtifactStagingDirectory)/release-notes.md", "required": true, "helpMarkDown": "Path where the generated release notes will be saved" }, @@ -41,7 +41,7 @@ "name": "outputFileHtml", "type": "filePath", "label": "Output File - HTML", - "defaultValue": "$(Build.ArtifactStagingDirectory)/ReleaseNotes.html", + "defaultValue": "$(Build.ArtifactStagingDirectory)/release-notes.html", "required": true, "helpMarkDown": "Path where the generated release notes will be saved" }, diff --git a/CommitRangeReleaseNotesTask/task/utils/WorkItemUtils.ts b/CommitRangeReleaseNotesTask/task/utils/WorkItemUtils.ts index c4ff1b9..e19d63a 100644 --- a/CommitRangeReleaseNotesTask/task/utils/WorkItemUtils.ts +++ b/CommitRangeReleaseNotesTask/task/utils/WorkItemUtils.ts @@ -36,14 +36,6 @@ export async function getWorkItem( project: string, accessToken: string ): Promise { - const fields = [ - "System.Title", - "System.WorkItemType", - "System.AssignedTo", - "System.Description" - ]; - - // fields=${fields.join(',')}& const url = `${apiUrl}/${project}/_apis/wit/workitems/${workItemId}?api-version=7.1&$expand=ALL`; console.log(`Fetching work item ${workItemId} from ${url}`); diff --git a/README.md b/README.md index bcc95aa..f04b01f 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,8 @@ The extension analyses Git commits in a specified range, looking for merge commi inputs: startCommit: 'v1.0.0' endCommit: 'HEAD' - outputFile: '$(Build.ArtifactStagingDirectory)/ReleaseNotes.md' + outputFileMarkdown: '$(Build.ArtifactStagingDirectory)/release-notes.md' + outputFileHtml: '$(Build.ArtifactStagingDirectory)/release-notes.html' ``` ### With Custom Template @@ -33,8 +34,10 @@ The extension analyses Git commits in a specified range, looking for merge commi inputs: startCommit: 'v1.0.0' endCommit: 'v1.1.0' - outputFile: 'release-notes.md' - templateFile: 'templates/custom-release-notes.hbs' + outputFileMarkdown: '$(Build.ArtifactStagingDirectory)/release-notes.md' + outputFileHtml: '$(Build.ArtifactStagingDirectory)/release-notes.html' + templateFileMarkdown: 'templates/custom-release-notes.hbs' + templateFileHtml: 'templates/custom-release-notes.hbs' ``` ## Parameters @@ -42,16 +45,16 @@ The extension analyses Git commits in a specified range, looking for merge commi |-----------|-------------|----------|---------| | `startCommit` | Commit reference for the start of the range (exclusive). Can be a commit hash, git tag, or a ref like `HEAD` or `HEAD~xx` | ✅ | - | | `endCommit` | Commit reference for the end of the range (inclusive). Can be a commit hash, git tag, or a ref like `HEAD` or `HEAD~xx` | ✅ | `HEAD` | -| `outputFile` | Path where generated release notes will be saved | ✅ | `$(Build.ArtifactStagingDirectory)/ReleaseNotes.md` | -| `templateFile` | Path to custom Handlebars template file | ❌ | Built-in template | +| `outputFileMarkdown` and `outputFileHtml` | Path where generated release notes will be saved | ✅ | `$(Build.ArtifactStagingDirectory)/release-notes.html` and `$(Build.ArtifactStagingDirectory)/release-notes.html` | +| `templateFileMarkdown` and `templateFileHtml` | Path to custom Handlebars template file | ❌ | Built-in template | ### Supported commit reference formats for `startCommit` and `endCommit` - Commit hash (e.g., `a1b2c3d`) - Git tag (e.g., `v1.0.0`) - `HEAD` or `HEAD~xx` (where `xx` is the number of commits before HEAD) -## Sample Output -The [default template](https://github.com/IeuanWalker/AzureDevops-GenerateReleaseNotes/blob/master/CommitRangeReleaseNotesTask/task/defaultTemplate.hbs) outputs the following format - +## Output +The [default markdown template](https://github.com/IeuanWalker/AzureDevops-GenerateReleaseNotes/blob/master/CommitRangeReleaseNotesTask/task/defaultTemplateMarkdown.hbs) outputs the following format - ```markdown ## 📊 Summary - **3** Pull Requests @@ -85,6 +88,8 @@ The [default template](https://github.com/IeuanWalker/AzureDevops-GenerateReleas | [44](https://dev.azure.com/org/project/_git/pullrequest/44) | Bug fixes and improvements | Bob Wilson | ``` +It also generates an interactive html version using this [template.](https://github.com/IeuanWalker/AzureDevops-GenerateReleaseNotes/blob/master/CommitRangeReleaseNotesTask/task/defaultTemplateHtml.hbs) + ## Template Customisation The task uses Handlebars templates to format output. You can provide a custom template file or use the built-in default template. @@ -192,21 +197,22 @@ interface WorkItemList { {{/if}} ``` -## Console Usage +## Local testing The task can also be run from the command line for testing. - Clone the repo - Run `npm run build`, in the `CommitRangeReleaseNotesTask` folder - Run the following command from the folder `CommitRangeReleaseNotesTask\task\dist` ```cmd -node ./mainConsole.js \ - --startCommit "v1.0.0" \ - --endCommit "HEAD" \ - --outputFile "C:\release-notes.md" \ - --repoRoot "\path\to\repo" \ - --systemAccessToken "your-token" \ - --project "your-project" \ - --repositoryId "your-repo" \ +node ./mainConsole.js + --startCommit "v1.0.0" + --endCommit "HEAD" + --outputFileMarkdown "C:\release-notes.md" + --outputFileHtml "C:\release-notes.html" + --repoRoot "\path\to\repo" + --systemAccessToken "your-token" + --project "your-project" + --repositoryId "your-repo" --apiUrl "https://dev.azure.com/your-org" ``` > To test locally, the `systemAccessToken` will need to be a [Personal Access Token (PAT)](https://learn.microsoft.com/en-us/azure/devops/organizations/accounts/use-personal-access-tokens-to-authenticate?view=azure-devops&tabs=Windows). diff --git a/output/release-notes.html b/output/release-notes.html deleted file mode 100644 index 4ef5560..0000000 --- a/output/release-notes.html +++ /dev/null @@ -1,1532 +0,0 @@ - - - - - - Release Notes - - - - -
-

Release Notes

-

- Generated on 02/07/2025 13:42 from Release-iOS-3.0.1-40-14490 to - HEAD -

-

Repository: CardiffMobileApp

- -

📊 Summary

- - -

📋 Work Items

-

Bugs (11)

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
IDTitleAssigneeLinked PRs
45102Opertaional Support - Development Platform - Bulkies Something went wrong - Walker, Ieuan - Walker, Ieuan - - 6897 -
-
- Description: -

No description available.

-
-
45122Operational Support - Bugs in production - Missing contact nos. - Walker, Ieuan - Walker, Ieuan - - 6896 -
-
- Description: -

No description available.

-
-
44952Operational Support - Bugs in production - Contrast - Walker, Ieuan - Walker, Ieuan - - 6837 -
-
- Description: -

No description available.

-
-
44851Operational Support - Suggestions - Map Key - Missing Key - Cuthbert, Kyle - Cuthbert, Kyle - - 6806 -
-
- Description: -

No description available.

-
-
44806Operational Support - Bugs in production - Stuck on Map screen - Walker, Ieuan - Walker, Ieuan - - 6802 -
-
- Description: -

No description available.

-
-
36375Operational Support - Bugs in production - WAF Address search - Walker, Ieuan - Walker, Ieuan - - 6787 -
-
- Description: -
The WAF is currently blocking a few address searches in live (location and gazetteer api). We need to apply the WAF workaround to the search fields.

  • Doesnt like the word 'and'
    • Image
  • Doesnt like the word 'union'
    • Image
-
-
36377Operational Support - Bugs in production - WAF free text issues - Walker, Ieuan - Walker, Ieuan - - 6786, - 6784 -
-
- Description: -

No description available.

-
-
44276Operational Support - Bugs in Production - Map loading - Walker, Ieuan - Walker, Ieuan - - 6756, - 6754, - 6744 -
-
- Description: -

No description available.

-
-
44139Operational Support - Bugs in production - SetSemanticFocus crash - Walker, Ieuan - Walker, Ieuan - - 6758 -
-
- Description: -

No description available.

-
-
44267Operational Support - Bugs in Production - No Browser - Walker, Ieuan - Walker, Ieuan - - 6725 -
-
- Description: -

No description available.

-
-
44325Technical - Development Tooling - VS - Missing android options - Walker, Ieuan - Walker, Ieuan - - 6727 -
-
- Description: -

No description available.

-
-
-

Tasks (16)

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
IDTitleAssigneeLinked PRs
43351Waste Management - Fly-tipping - Map - Castle Reports - Dev - Walker, Ieuan - Walker, Ieuan - - 6862 -
-
- Description: -
Proposed dev solution - we -were going to detect the eastings / northings or long / lat of the pin and -compare it to that of where the pin defaults (the castle).  If it's the -same, we demand they move the pin again.

When at default northern and eastern don't allow user to click next.
-
-
29426General - Accessibility - Error Message Colour - Dev - Coates, Sarah - Coates, Sarah - - 6834 -
-
- Description: -
Make the error message colour a better contrast for accessibility reasons.  See task #29381 for chosen colour

WarningColor
-
 - from dark theme style sheet
-
-
44853Operational Support - Suggestions from the public - Map key - Highways - Cuthbert, Kyle - Cuthbert, Kyle - - 6808 -
-
- Description: -
To add the map key to Highways routes
-
-
44547Technical - Remove AutoMapper Package - Council Tax Api - Dev - Walker, Ieuan - Walker, Ieuan - - 6810 -
-
- Description: -
Done alongside MEND work
-
-
44503Operational Support - Suggestions from the public - Map key - Graffiti - Cuthbert, Kyle - Cuthbert, Kyle - - 6800 -
-
- Description: -
Just adding map key. Can copy the code that we used to use.  
-
-
44506Operational Support - Suggestions from the public - Map key - Street Cleansing - Cuthbert, Kyle - Cuthbert, Kyle - - 6800 -
-
- Description: -
#44058 for info
-
-
44508Operational Support - Suggestions from the public - Map key - Flytipping - Cuthbert, Kyle - Cuthbert, Kyle - - 6800 -
-
- Description: -

No description available.

-
-
43911Technical - Security - Android Key Store - Pipeline tidy up - Walker, Ieuan - Walker, Ieuan - - 6755, - 6753, - 6752 -
- -
44062Technical - Maui - Post Go Live - Migrate UI Test - Walker, Ieuan - Walker, Ieuan - - 6743 -
-
- Description: -

No description available.

-
-
44712Operational Support - Bugs in Production - No Browser - Test - Powell, Sheila - Powell, Sheila - - 6725 -
-
- Description: -
Test message appears when no enabled browser
-
-
43523Maui – Post go live - Remove the Device Token and Related Code - Walker, Ieuan - Walker, Ieuan - - 6733 -
-
- Description: -

No description available.

-
-
43553Maui - Post go live - Revert the whats new logic - Walker, Ieuan - Walker, Ieuan - - 6731 -
-
- Description: -
Within the Homepage there is a TODO to revert the logic that determines when a whats new should show. Uncomment the alternative logic and remove the workaround if statement
-
-
43522Maui – Post go live - Migration of Secure User Details – Remove - Walker, Ieuan - Walker, Ieuan - - 6730 -
-
- Description: -

No description available.

-
-
44330Unit Testing - Add base tests - Walker, Ieuan - Walker, Ieuan - - 6653 -
-
- Description: -

No description available.

-
-
44331Technical - Visual Studio - fix MAUI hot reload - Walker, Ieuan - Walker, Ieuan - - 6681 -
-
- Description: -

No description available.

-
-
43705Maui - Make Prod ready - Prod builds - Walker, Ieuan - Walker, Ieuan - - 6721, - 6720 -
-
- Description: -

No description available.

-
-
- -

🔀 Pull Requests

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
IDTitleAuthorLinked Work Items
6897Fix: Bulky payment - Walker, Ieuan - Walker, Ieuan - - 45102 -
-
- Description: -

No description available.

-
-
6896Rename ContactNumber to Tel in CustomerModel - Walker, Ieuan - Walker, Ieuan - - 45122 -
-
- Description: -

No description available.

-
-
6837Prevent address search when query is blank or doesnt contain letters after sanitising it - Walker, Ieuan - Walker, Ieuan - - 44952 -
-
- Description: -

No description available.

-
-
6862Hide map next button on default location - Walker, Ieuan - Walker, Ieuan - - 43351 -
-
- Description: -

No description available.

-
-
6834change colour of error messages on dark theme to a ligher yellow (better cont... - Coates, Sarah - Coates, Sarah - - 29426 -
-
- Description: -

change colour of error messages on dark theme to a ligher yellow (better contrast)

- -
-
6808added map key to highways and corrected semantic property description - Cuthbert, Kyle - Cuthbert, Kyle - - 44853 -
-
- Description: -

added map key to highways and corrected semantic property description

- -
-
6810Added comment to update in the future - Walker, Ieuan - Walker, Ieuan - - 44547 -
-
- Description: -

No description available.

-
-
6806Replace mapkey_marker.svg with mapkey_reported.svg - Cuthbert, Kyle - Cuthbert, Kyle - - 44851 -
-
- Description: -

Replace mapkey_marker.svg with mapkey_reported.svg

-

Removed mapkey_marker.svg and added mapkey_reported.svg to update the map key icon. Updated references in MapPage.xaml.cs to use the new file, ensuring the application reflects the updated visual representation.

- -
-
6800Add MapKey - Cuthbert, Kyle - Cuthbert, Kyle - - 44503, - 44506, - 44508 -
-
- Description: -

No description available.

-
-
6802Fix: Infinite loader when clicking next before the map has loaded - Walker, Ieuan - Walker, Ieuan - - 44806 -
-
- Description: -

If you clicked next on the map page before the map has loaded, it would trigger the WebView code to call the JS to get the location, the WebView code would never return and the loader would stay on the app and the user would have to close/ restart the app

-

image.png

-

Added a 3s timeout too that code to prevent the infinite loader in the future.

-

Issue with the timeout the user would see the general error message "something gone wrong..."

-

Too prevent the user even getting into this position the next button now doesn't appear until the map has loaded using a new property MapReady binded to the NextBack button HasContinueButton

- -
-
6787Add WAF workaround to residential address searches - Walker, Ieuan - Walker, Ieuan - - 36375 -
-
- Description: -

Example search that used to fail -

-
    -
  • 123 union street
  • -
  • 176 and 183 place
  • -
  • 146, 148 and 150 PENCISELY ROAD
  • -
  • 60 && 62 OAKLEY PLACE
  • -
  • 4 and 5 kirkwall crt cf24 2qu
  • -
- -
-
6786Fix: PR - Walker, Ieuan - Walker, Ieuan - - 36377 -
-
- Description: -

No description available.

-
-
6784Fix: WAF doesnt like `Likely` - Walker, Ieuan - Walker, Ieuan - - 36377 -
-
- Description: -

No description available.

-
-
6756Fix: GPS Position for out of cardiff map load - Walker, Ieuan - Walker, Ieuan - - 44276 -
-
- Description: -

No description available.

-
-
6758Fix: Make SetSemanticFocusForcefully safe - Walker, Ieuan - Walker, Ieuan - - 44139 -
-
- Description: -

Same as previous fix, but for SetSemanticFocusForcefully - https://dev.azure.com/cardiffcouncilict/Cardiff%20App/_git/CardiffMobileApp/pullrequest/6707

- -
-
6754Fix: ishare infinite loader - Walker, Ieuan - Walker, Ieuan - - 44276 -
-
- Description: -

I added a console log every in the Javascript file, just so i can see where/ what it was doing.

-

Using that, after a lot of attempt once it failed, i saw that it called await window.HybridWebView.InvokeDotNet("MapLoadedCSharp"); before ishare fully loaded, the way it would determine if ishare was loaded was just if the ishare loader wasnt there anymore. But i think it was doing that check a split second before ishare initialised/ started the loader (very intermittently/ rare)

-

So our code would think ishare has loaded even though it hasnt.

-

It would then fail to set the location and get stuck.

-

Using the extra logs though i could see that remove_map_listener was always getting logged after ishare loaded, which gets triggered via ishares dataLayersLoaded event, so moved the map loaded callback to there instead

- -
-
6755Renamed AndroidVariableV2 - Walker, Ieuan - Walker, Ieuan - - 43911 -
-
- Description: -

No description available.

-
-
6753Remove hyphens from iOS pipeline - Walker, Ieuan - Walker, Ieuan - - 43911 -
-
- Description: -

No description available.

-
-
6752Tidy up pipeline names/ remove MauiMigration reference - Walker, Ieuan - Walker, Ieuan - - 43911 -
-
- Description: -

No description available.

-
-
6744Slow map loading message - Walker, Ieuan - Walker, Ieuan - - 44276 -
-
- Description: -

2 fixes -

-
    -
  • Slow loading message/ button appears after 7s (see vid attached to bug)
  • -
  • Improved map loading times when centering based on GPS and user is outside cardiff
  • -
- -
-
6743UI Tests - Walker, Ieuan - Walker, Ieuan - - 44062 -
-
- Description: -

No description available.

-
-
6725Fix: Make opening a browser safe - Walker, Ieuan - Walker, Ieuan - - 44267, - 44712 -
-
- Description: -

No description available.

-
-
6733Remove XF device token - Walker, Ieuan - Walker, Ieuan - - 43523 -
-
- Description: -

No description available.

-
-
6731Revert WhatsNew logic - Walker, Ieuan - Walker, Ieuan - - 43553 -
-
- Description: -

No description available.

-
-
6730Remove SecureStorage XF -> MAUI migration - Walker, Ieuan - Walker, Ieuan - - 43522 -
-
- Description: -

No description available.

-
-
6653Add unit tests - Walker, Ieuan - Walker, Ieuan - - 44330 -
-
- Description: -

This PR adds some unit tests to make it easier to add more later

- -
-
6681Fix: Hot reload - Walker, Ieuan - Walker, Ieuan - - 44331 -
-
- Description: -

_MauiForceXamlCForDebug prevented hot reload from working at all, more info here - https://developercommunity.visualstudio.com/t/Hot-reload-not-working-for-NET-MAUI/10883884

-

Once hot reload was working when you save a change it essential just reloads the XAML. The main content of the page would disappear becuase the base pages set the IsVisble to false by default, and in C# it then uses IsContentVisible to set the content visibility manually. Issue is HotReload only re-renders the xaml and does not trigger the C# code behind the page so was never being set back to true.

-

IsContentVisible is not used, and was something just copied over from XF so can just be removed. So hot reload works on all pages now

- -
-
6721Pipeline fixes - Walker, Ieuan - Walker, Ieuan - - 43705 -
-
- Description: -

No description available.

-
-
6727Fix: Missing android launch settings - Walker, Ieuan - Walker, Ieuan - - 44325 -
-
- Description: -

No description available.

-
-
6720Mend pipelines - Walker, Ieuan - Walker, Ieuan - - 43705 -
-
- Description: -

New pipelines added to run mend reports for Android + iOS

-

No vunerabilities in MAUI version atm -

- - - - - - - - - - - - - - - -
BeforeAfter
image.pngimage (2).png
image (3).pngimage (4).png
- -
-
-
- - - - - - - \ No newline at end of file