CI Cleanup improvements (#2992)

* Allow exchange timestamps from item/folder names based with create time as backup
* Parametrize folder prefixes and move to var from secrets for ease of management. There is nothing sensitive
---

#### Does this PR need a docs update or release note?

- [ ]  Yes, it's included
- [ ] 🕐 Yes, but in a later PR
- [x]  No

#### Type of change

<!--- Please check the type of change your PR introduces: --->
- [ ] 🌻 Feature
- [x] 🐛 Bugfix
- [ ] 🗺️ Documentation
- [ ] 🤖 Supportability/Tests
- [x] 💻 CI/Deployment
- [ ] 🧹 Tech Debt/Cleanup

#### Issue(s)

<!-- Can reference multiple issues. Use one of the following "magic words" - "closes, fixes" to auto-close the Github issue. -->

#### Test Plan

<!-- How will this be tested prior to merging.-->
- [x] 💪 Manual
- [ ]  Unit test
- [ ] 💚 E2E
This commit is contained in:
Georgi Matev 2023-03-30 16:31:15 -07:00 committed by GitHub
parent a6a037df28
commit b23faa0fac
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 42 additions and 8 deletions

View File

@ -47,7 +47,7 @@ runs:
AZURE_CLIENT_SECRET: ${{ inputs.azure-client-secret }}
AZURE_TENANT_ID: ${{ inputs.azure-tenant-id }}
run: |
./exchangePurge.ps1 -User ${{ inputs.user }} -FolderNamePurgeList PersonMetadata -FolderPrefixPurgeList ${{ inputs.folder-prefix }} -PurgeBeforeTimestamp ${{ inputs.older-than }}
./exchangePurge.ps1 -User ${{ inputs.user }} -FolderNamePurgeList PersonMetadata -FolderPrefixPurgeList "${{ inputs.folder-prefix }}".Split(",") -PurgeBeforeTimestamp ${{ inputs.older-than }}
- name: Run the OneDrive purge scripts for user
if: ${{ inputs.user != '' }}
@ -57,7 +57,7 @@ runs:
M365_TENANT_ADMIN_USER: ${{ inputs.m365-admin-user }}
M365_TENANT_ADMIN_PASSWORD: ${{ inputs.m365-admin-password }}
run: |
./onedrivePurge.ps1 -User ${{ inputs.user }} -FolderPrefixPurgeList ${{ inputs.folder-prefix }} -PurgeBeforeTimestamp ${{ inputs.older-than }}
./onedrivePurge.ps1 -User ${{ inputs.user }} -FolderPrefixPurgeList "${{ inputs.folder-prefix }}".Split(",") -PurgeBeforeTimestamp ${{ inputs.older-than }}
- name: Run SharePoint purge script
if: ${{ inputs.user == '' }}

View File

@ -29,8 +29,8 @@ jobs:
with:
user: ${{ secrets[matrix.user] }}
site: ${{ secrets.CORSO_M365_TEST_SITE_URL}}
folder-prefix: "Corso_Restore_, TestRestore, testfolder, incrementals_ci_, Alcion_Restore_"
libraries: ${{ secrets.CORSO_M365_TEST_SITE_LIBRARIES }}
folder-prefix: ${{ vars.CORSO_M365_TEST_PREFIXES }}
libraries: ${{ vars.CORSO_M365_TEST_SITE_LIBRARIES }}
older-than: ${{ env.HALF_HOUR_AGO }}
azure-client-id: ${{ secrets.CLIENT_ID }}
azure-client-secret: ${{ secrets.CLIENT_SECRET }}

View File

@ -115,13 +115,43 @@ function IsNameMatch {
return ($FolderName -in $FolderNamePurgeList)
}
function Get-TimestampFromName {
param (
[Parameter(Mandatory = $True, HelpMessage = "name")]
[String]$name,
[Parameter(Mandatory = $True, HelpMessage = "Default timestamp if not found in name")]
[datetime]$defaultTimestamp
)
#fallback on folder create time
[datetime]$timestamp = $defaultTimestamp
try {
# Assumes that the timestamp is at the end and starts with yyyy-mm-ddT and is ISO8601
if ($name -imatch "(\d{4}}-\d{2}-\d{2}T.*)") {
$timestamp = [System.Convert]::ToDatetime($Matches.0)
}
# Assumes that the timestamp is at the end and starts with dd-MMM-yyyy_HH-MM-SS
if ($name -imatch "(\d{2}-[a-zA-Z]{3}-\d{4}_\d{2}-\d{2}-\d{2})") {
$timestamp = [datetime]::ParseExact($Matches.0, "dd-MMM-yyyy_HH-mm-ss", [CultureInfo]::InvariantCulture, "AssumeUniversal")
}
}
catch {}
Write-Verbose "Folder: $name, create timestamp: $timestamp"
return $timestamp
}
function IsPrefixAndAgeMatch {
Param(
[Parameter(Mandatory = $True, HelpMessage = "Folder name to evaluate for match against a list of targets")]
[string]$FolderName,
[Parameter(Mandatory = $True, HelpMessage = "Folder creation times")]
[string]$FolderCreateTime,
[datetime]$FolderCreateTime,
[Parameter(Mandatory = $True, HelpMessage = "Folder name prefixes to evaluate for match")]
[string[]]$FolderPrefixPurgeList,
@ -129,8 +159,10 @@ function IsPrefixAndAgeMatch {
[Parameter(Mandatory = $TRUE, HelpMessage = "Purge folders before this date time (UTC)")]
[datetime]$PurgeBeforeTimestamp
)
if ($PurgeBeforeTimestamp -gt $folderCreateTime ) {
$folderTimestamp = Get-TimestampFromName -name $FolderName -defaultTimestamp $FolderCreateTime
if ($PurgeBeforeTimestamp -gt $folderTimestamp ) {
foreach ($prefix in $FolderPrefixPurgeList) {
if ($FolderName -like "$prefix*") {
return $true
@ -437,7 +469,9 @@ function Get-ItemsToPurge {
continue
}
if (![String]::IsNullOrEmpty($PurgeBeforeTimestamp) -and $itemCreateTime -gt $PurgeBeforeTimestamp) {
$itemTimestamp = Get-TimestampFromName -name $itemName -defaultTimestamp $itemCreateTime
if (![String]::IsNullOrEmpty($PurgeBeforeTimestamp) -and $itemTimestamp -gt $PurgeBeforeTimestamp) {
continue
}