From e27c87fc0227b44682269f461d5e742cea63673d Mon Sep 17 00:00:00 2001 From: he3als <65787561+he3als@users.noreply.github.com> Date: Thu, 6 Jun 2024 20:18:37 +0100 Subject: [PATCH 01/21] feat: add nanazip --- src/playbook/Executables/SOFTWARE.ps1 | 77 ++++++++++++++++++++++----- 1 file changed, 65 insertions(+), 12 deletions(-) diff --git a/src/playbook/Executables/SOFTWARE.ps1 b/src/playbook/Executables/SOFTWARE.ps1 index b0a7b50484..f0cb0b0c38 100644 --- a/src/playbook/Executables/SOFTWARE.ps1 +++ b/src/playbook/Executables/SOFTWARE.ps1 @@ -49,7 +49,7 @@ if ($Firefox) { Write-Output "Downloading Firefox..." & curl.exe -LSs "https://download.mozilla.org/?product=firefox-latest-ssl&os=$firefoxArch&lang=en-US" -o "$tempDir\firefox.exe" Write-Output "Installing Firefox..." - Start-Process -FilePath "$tempDir\firefox.exe" -WindowStyle Hidden -ArgumentList '/S /ALLUSERS=1' -Wait | Out-Null + Start-Process -FilePath "$tempDir\firefox.exe" -WindowStyle Hidden -ArgumentList '/S /ALLUSERS=1' -Wait exit } @@ -59,7 +59,7 @@ if ($Chrome) { $chromeArch = ('64', '_Arm64')[$arm] & curl.exe -LSs "https://dl.google.com/dl/chrome/install/googlechromestandaloneenterprise$chromeArch.msi" -o "$tempDir\chrome.msi" Write-Output "Installing Google Chrome..." - Start-Process -FilePath "$tempDir\chrome.msi" -WindowStyle Hidden -ArgumentList '/qn' -Wait | Out-Null + Start-Process -FilePath "$tempDir\chrome.msi" -WindowStyle Hidden -ArgumentList '/qn' -Wait exit } @@ -119,21 +119,74 @@ foreach ($a in $vcredists.GetEnumerator()) { } } -# 7-Zip -$website = 'https://7-zip.org/' -$7zipArch = ('x64', 'arm64')[$arm] -$download = $website + ((Invoke-WebRequest $website -UseBasicParsing).Links.href | Where-Object { $_ -like "a/7z*-$7zipArch.exe" }) -Write-Output "Downloading 7-Zip..." -& curl.exe -LSs $download -o "$tempDir\7zip.exe" -Write-Output "Installing 7-Zip..." -Start-Process -FilePath "$tempDir\7zip.exe" -WindowStyle Hidden -ArgumentList '/S' -Wait | Out-Null +# NanaZip +function Install7Zip { + $website = 'https://7-zip.org/' + $7zipArch = ('x64', 'arm64')[$arm] + $download = $website + ((Invoke-WebRequest $website -UseBasicParsing).Links.href | Where-Object { $_ -like "a/7z*-$7zipArch.exe" }) + Write-Output "Downloading 7-Zip..." + & curl.exe -LSs $download -o "$tempDir\7zip.exe" + Write-Output "Installing 7-Zip..." + Start-Process -FilePath "$tempDir\7zip.exe" -WindowStyle Hidden -ArgumentList '/S' -Wait +} + +$githubApi = Invoke-RestMethod "https://api.github.com/repos/M2Team/NanaZip/releases/latest" -EA 0 +$assets = $githubApi.Assets.browser_download_url | Select-String ".xml", ".msixbundle" | Select-Object -Unique -First 2 +function InstallNanaZip { + Write-Output "Downloading NanaZip..." + $path = New-Item "$tempDir\nanazip-$(New-Guid)" -ItemType Directory + $assets | ForEach-Object { + $filename = $_ -split '/' | Select-Object -Last 1 + Write-Output "Downloading '$filename'..." + & curl.exe -LSs $_ -o "$path\$filename" + } + + Write-Output "Installing NanaZip..." + try { + $appxArgs = @{ + "PackagePath" = (Get-ChildItem $path -Filter "*.msixbundle" | Select-Object -First 1).FullName + "LicensePath" = (Get-ChildItem $path -Filter "*.xml" | Select-Object -First 1).FullName + } + Add-AppxProvisionedPackage -Online @appxArgs | Out-Null + + Write-Output "Installed NanaZip!" + } catch { + Write-Error "Failed to install NanaZip! Getting 7-Zip instead. $_" + Install7Zip + } +} + +if ($assets.Count -eq 2) { + $7zipRegistry = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\7-Zip" + if (Test-Path $7zipRegistry) { + $WindowTitle = 'Installing NanaZip - Atlas' + + $Message = @' +Would you like to uninstall 7-Zip and replace it with NanaZip? + +NanaZip is a fork of 7-Zip with an updated user interface and extra features. +'@ + + if ((New-Object -ComObject "Wscript.Shell").Popup($Message,300,$WindowTitle,4+32+4096) -eq 6) { + $7zipUninstall = (Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\7-Zip" -Name "QuietUninstallString" -EA 0).QuietUninstallString + Write-Output "Uninstalling 7-Zip..." + Start-Process -FilePath "cmd" -WindowStyle Hidden -ArgumentList "/c $7zipUninstall" -Wait + InstallNanaZip + } + } else { + InstallNanaZip + } +} else { + Write-Error "Can't access GitHub API, downloading 7-Zip instead of NanaZip." + Install7Zip +} # Legacy DirectX runtimes & curl.exe -LSs "https://download.microsoft.com/download/8/4/A/84A35BF1-DAFE-4AE8-82AF-AD2AE20B6B14/directx_Jun2010_redist.exe" -o "$tempDir\directx.exe" Write-Output "Extracting legacy DirectX runtimes..." -Start-Process -FilePath "$tempDir\directx.exe" -WindowStyle Hidden -ArgumentList "/q /c /t:`"$tempDir\directx`"" -Wait | Out-Null +Start-Process -FilePath "$tempDir\directx.exe" -WindowStyle Hidden -ArgumentList "/q /c /t:`"$tempDir\directx`"" -Wait Write-Output "Installing legacy DirectX runtimes..." -Start-Process -FilePath "$tempDir\directx\dxsetup.exe" -WindowStyle Hidden -ArgumentList '/silent' -Wait | Out-Null +Start-Process -FilePath "$tempDir\directx\dxsetup.exe" -WindowStyle Hidden -ArgumentList '/silent' -Wait # Remove temporary directory Pop-Location From b29ac6b90358153c301758c4272cd55d623fdef1 Mon Sep 17 00:00:00 2001 From: he3als <65787561+he3als@users.noreply.github.com> Date: Thu, 6 Jun 2024 20:22:25 +0100 Subject: [PATCH 02/21] feat: new contribution guideline changes --- .github/labeler.yml | 16 ++++--- .github/workflows/dev-branch-merge.yaml | 40 ----------------- .github/workflows/filter.yaml | 57 ------------------------- .github/workflows/labeler.yaml | 13 ++++++ 4 files changed, 23 insertions(+), 103 deletions(-) delete mode 100644 .github/workflows/dev-branch-merge.yaml delete mode 100644 .github/workflows/filter.yaml create mode 100644 .github/workflows/labeler.yaml diff --git a/.github/labeler.yml b/.github/labeler.yml index e109b20567..e2963814d5 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -11,17 +11,21 @@ playbook: - src/**/* appx: -- src/Configuration/features/atlas/appx.yml +- src/Configuration/atlas/appx.yml components: -- src/Configuration/features/atlas/components.yml -- src/Configuration/features/atlas/packages.yml +- src/Configuration/atlas/components.yml +- src/Configuration/atlas/packages.yml config: -- src/Configuration/features/atlas/config.yml +- src/Configuration/atlas/config.yml services: -- src/Configuration/features/atlas/services.yml +- src/Configuration/atlas/services.yml + +tweaks: +- src/Configuration/tweaks.yml +- src/Configuration/tweaks/**/* desktop folder: -- src/Executables/Atlas/**/* +- src/Executables/AtlasDesktop/**/* diff --git a/.github/workflows/dev-branch-merge.yaml b/.github/workflows/dev-branch-merge.yaml deleted file mode 100644 index 87a3e2f9b3..0000000000 --- a/.github/workflows/dev-branch-merge.yaml +++ /dev/null @@ -1,40 +0,0 @@ -name: Auto Merge Dev Branch - -on: - schedule: - - cron: '0 0 * * 1' - workflow_dispatch: - -jobs: - create_pull_request: - permissions: - pull-requests: write - runs-on: ubuntu-latest - - steps: - - name: Checkout code - uses: actions/checkout@v3 - with: - fetch-depth: 0 - - - name: Create pull request - run: | - title="Automatic PR: Merging dev into main ($(git rev-parse --short=7 remotes/origin/dev))" - - body=" - This pull request was automatically created by GitHub Actions, and it is automatically done at the start of every Monday or manually ran. It merges all of the changes that were made to the \`dev\` branch into the \`main\` branch. - - The reason why the [\`dev\`](https://github.com/Atlas-OS/Atlas/tree/dev) branch exists is to make sure that all of the code in [\`main\`](https://github.com/Atlas-OS/Atlas) has been properly reviewed and approved. **Five contributors** have to approve this pull request for it to be merged. - - **See here for more information:** https://docs.atlasos.net/contributions - - **Last commit to [\`dev\`](https://github.com/Atlas-OS/Atlas/tree/dev):** https://github.com/Atlas-OS/Atlas/commit/$(git rev-parse remotes/origin/dev) - " - - gitLog=$(git log main..remotes/origin/dev) - - if [ -n "$gitLog" ]; then - gh pr create -B "main" -H "dev" --title "$title" -l "auto-pr" --body "$body" - fi - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/filter.yaml b/.github/workflows/filter.yaml deleted file mode 100644 index 7798eb9c5d..0000000000 --- a/.github/workflows/filter.yaml +++ /dev/null @@ -1,57 +0,0 @@ -name: Pull Request Filter - -on: pull_request_target - -jobs: - filter: - permissions: - contents: read - pull-requests: write - runs-on: ubuntu-latest - - steps: - - name: Checkout code - uses: actions/checkout@v3 - - - name: Label pull request - uses: actions/labeler@v4 - - - name: Close pull requests that directly commit to main - run: | - comment=" - You cannot directly commit to the [\`main\`](https://github.com/Atlas) branch, read the contribution guide and only commit to [\`dev\`](https://github.com/Atlas/tree/dev). - - **Contribution Guidelines:** https://docs.atlasos.net/contributions - " - - exclude_labels=" - bypass - auto-pr - translations - readme - dependencies - " - - no_run=false - - for pr_number in $(gh pr list --json number --jq '.[].number'); do - echo "Processing pull request: #$pr_number" - - for label in $(gh pr view $pr_number --json labels --jq '.labels[].name'); do - if [[ "$exclude_labels" == *"$label"* ]]; then - no_run=true - break - fi - done - - if [ "$no_run" == "true" ]; then - echo "Pull request #$pr_number merges into main, but it is being bypassed due to its labels." - else - if [ $(gh pr view $pr_number --json baseRefName --jq '.baseRefName') == 'main' ]; then - echo "Closing pull request #$pr_number as it directly commits to main..." - gh pr close $pr_number --comment "$comment" - fi - fi - done - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/labeler.yaml b/.github/workflows/labeler.yaml new file mode 100644 index 0000000000..fc7162f499 --- /dev/null +++ b/.github/workflows/labeler.yaml @@ -0,0 +1,13 @@ +name: "Pull Request Labeler" + +on: +- pull_request_target + +jobs: + filter: + permissions: + contents: read + pull-requests: write + runs-on: ubuntu-latest + steps: + - uses: actions/labeler@v4 From b8b7c9ad32905f2201cff34ad1697a29dae60910 Mon Sep 17 00:00:00 2001 From: he3als <65787561+he3als@users.noreply.github.com> Date: Thu, 6 Jun 2024 20:39:43 +0100 Subject: [PATCH 03/21] feat: update issue templates with checkboxes --- .github/ISSUE_TEMPLATE/bug_report.yml | 19 ++++++++++++------- .github/ISSUE_TEMPLATE/config.yml | 8 ++++---- .github/ISSUE_TEMPLATE/feature_request.yml | 20 ++++++++++++-------- 3 files changed, 28 insertions(+), 19 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index eb931487b3..959a832d2f 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -3,15 +3,20 @@ description: Create a bug report to help us improve Atlas. labels: bug title: "[BUG] - " body: - - type: markdown + - type: checkboxes attributes: - value: | - Before submitting an issue, please ensure you have completed the following steps: - - Searched our [documentation](https://docs.atlasos.net) - - Searched our [issue tracker](https://github.com/Atlas-OS/Atlas/issues?q=is%3Aissue) to verify that the issue hasn't been reported already - - Confirmed that you are on the latest version of Atlas + label: Before continuing... + description: Please ensure you meet the following criteria. If not, the maintainers reserve the right to close and lock your issue. + options: + - label: "I agree to follow Atlas' [Code of Conduct](https://github.com/Atlas-OS/.github/blob/main/profile/CODE_OF_CONDUCT.md)" + required: true + - label: "I have searched our [issue tracker](https://github.com/Atlas-OS/Atlas/issues?q=is%3Aissue) to verify that the issue hasn't been reported already" + required: true + - label: "I have searched the [Atlas documentation](https://docs.atlasos.net) beforehand for a solution" + required: true + - label: "I am on the latest version of Atlas, and didn't do an unsupported upgrade" + required: true - Please note, by submitting an issue, you acknowledge that if the above steps have not been followed, the maintainers reserve the right to close and lock your issue without further response. - type: textarea attributes: label: Description diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index caf81569d2..53e4410689 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -1,8 +1,8 @@ blank_issues_enabled: false contact_links: - - name: Report Issue about Atlas Documentation + - name: Report an issue about the Atlas Documentation url: https://github.com/Atlas-OS/docs/issues/ - about: Report all Documentation issues in our Documentation repository issue tracker. - - name: Report an issue (non-Atlas related issue) + about: Report all documentation issues in our 'docs' repository issue tracker. + - name: Report a non-Atlas related issue url: https://forum.atlasos.net/t/atlas-bug-report - about: Please report any non-Atlas Playbook related issue in the ``Bug Report`` section on our Forum (Website, Discord bot, etc.). + about: Please report any non-Atlas Playbook related issue in the 'Bug Report' section on our forum (website, Discord bot, etc.). diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml index 5a0b73b1e5..d2398e563a 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.yml +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -3,16 +3,20 @@ description: Create a feature request to help us improve Atlas. labels: enhancement title: "[FEATURE] - " body: - - type: markdown + - type: checkboxes attributes: - value: | - Before submitting an feature request, please ensure you have completed the following steps: - - The request you submit is related to the Atlas Playbook. If not, request it in our [forum](https://forum.atlasos.net/t/general) - - Searched our [issue tracker](https://github.com/Atlas-OS/Atlas/issues?q=is%3Aissue) to verify that the issue hasn't been reported already - - Confirmed that your issue is not a support request - - Confirmed that your idea is not already in the latest version of Atlas + label: Before continuing... + description: Please ensure you meet the following criteria. If not, the maintainers reserve the right to close and lock your issue. + options: + - label: "I agree to follow Atlas' [Code of Conduct](https://github.com/Atlas-OS/.github/blob/main/profile/CODE_OF_CONDUCT.md)" + required: true + - label: "I have searched our [issue tracker](https://github.com/Atlas-OS/Atlas/issues?q=is%3Aissue) to verify that the issue hasn't been reported already" + required: true + - label: "I have searched the [Atlas documentation](https://docs.atlasos.net) beforehand for a solution" + required: true + - label: "I am on the latest version of Atlas, and didn't do an unsupported upgrade" + required: true - Please note, by submitting an issue, you acknowledge that if the above steps have not been followed, the maintainers reserve the right to close and lock your issue without further response. - type: dropdown attributes: label: What is your feature request regarding to? From 660b5032b38c055fd248f18039f3a98368cd8f29 Mon Sep 17 00:00:00 2001 From: he3als <65787561+he3als@users.noreply.github.com> Date: Thu, 6 Jun 2024 20:42:42 +0100 Subject: [PATCH 04/21] fix(issue templates): schema --- .github/ISSUE_TEMPLATE/bug_report.yml | 4 ++-- .github/ISSUE_TEMPLATE/feature_request.yml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 959a832d2f..543cba7b91 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -1,6 +1,7 @@ name: Bug report description: Create a bug report to help us improve Atlas. -labels: bug +labels: +- bug title: "[BUG] - " body: - type: checkboxes @@ -74,4 +75,3 @@ body: attributes: label: Additional content description: Anything you want to add. - validations: diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml index d2398e563a..89caceb6e0 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.yml +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -1,6 +1,7 @@ name: Feature request description: Create a feature request to help us improve Atlas. -labels: enhancement +labels: +- enhancement title: "[FEATURE] - " body: - type: checkboxes @@ -53,4 +54,3 @@ body: attributes: label: Additional context. description: Add any other context or screenshots about the feature request here. - validations: From 9c666048405eb381092acac53d314b70c3dea236 Mon Sep 17 00:00:00 2001 From: he3als <65787561+he3als@users.noreply.github.com> Date: Fri, 7 Jun 2024 11:01:58 +0100 Subject: [PATCH 05/21] feat: refactor all CI --- .github/workflows/apbx.yaml | 39 +--- .vscode/extensions.json | 8 + .vscode/launch.json | 29 +++ src/local-build.ps1 | 140 ++++++++++++++ src/playbook/Configuration/custom.yml | 4 - src/playbook/local-build.cmd | 256 +------------------------- 6 files changed, 189 insertions(+), 287 deletions(-) create mode 100644 .vscode/extensions.json create mode 100644 .vscode/launch.json create mode 100644 src/local-build.ps1 diff --git a/.github/workflows/apbx.yaml b/.github/workflows/apbx.yaml index 7d2b46b8ad..fdb91bb36b 100644 --- a/.github/workflows/apbx.yaml +++ b/.github/workflows/apbx.yaml @@ -9,7 +9,7 @@ env: SXSC_REPO: "https://github.com/Atlas-OS/sxsc" jobs: - package-build: + build: runs-on: windows-latest steps: @@ -105,44 +105,23 @@ jobs: working-directory: src\playbook\Executables\AtlasModules\Packages if: env.runSxsc == 'true' - build: - needs: package-build - runs-on: ubuntu-latest - - steps: - - name: Checkout code - uses: actions/checkout@v4 - with: - ref: ${{ github.ref }} - - name: Validate YAML files run: 'yamllint -d "{extends: relaxed, rules: {empty-lines: disable, line-length: disable, new-line-at-end-of-file: disable, trailing-spaces: disable}}" src/playbook/.' - - name: Configure playbook - id: config-playbook - if: ${{ !startsWith(github.ref, 'refs/heads/na-') }} - run: | - cd src/playbook - echo "Making playbook display as unverified (remove ProductCode) so that it is not marked as malicious..." - sed -i '//d' playbook.conf - echo "Change description of playbook..." - sed -i 's|.*<\/Description>|Experimental testing version of the Atlas Playbook, built with GitHub Actions from commit ${{ github.sha }}. Be aware of these builds being potentially unstable and buggy!|g' playbook.conf - cd Configuration - echo "Enabling AME Wizard Live Log..." - sed -i '7s/ #//' custom.yml - - name: Create playbook (ZIP/APBX password is malte) - if: ${{ steps.config-playbook.outcome != 'skipped' }} + id: create-pb + if: ${{ !startsWith(github.ref, 'refs/heads/na-') }} run: | - cd src/playbook echo "Making a renamed password protected (malte) ZIP of playbook files..." - zip -r -P malte "Atlas Playbook ${GITHUB_SHA::8}.apbx" . -x "local-build.cmd" - echo "Move the .abpx playbook into the 'Release ZIP' to be released as an artifact with the additional files..." - mv "Atlas Playbook ${GITHUB_SHA::8}.apbx" "../release-zip" + $pbName = "Atlas Playbook $($env:GITHUB_SHA.Substring(0,8)).apbx" + & ..\local-build.ps1 -ReplaceOldPlaybook -AddLiveLog -Removals Verification, WinverRequirement -FileName $pbName + echo "Move the .abpx playbook into 'Release ZIP' to be released as an artifact with the additional files..." + Move-Item $pbName "../release-zip" + working-directory: src\playbook - name: Upload artifact uses: actions/upload-artifact@v4 - if: ${{ steps.config-playbook.outcome != 'skipped' }} + if: ${{ steps.create-pb.outcome != 'skipped' }} with: name: Atlas Playbook path: | diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000000..7d0c6b6bed --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,8 @@ +{ + "recommendations": [ + "ms-vscode.powershell", + "ionutvmi.reg", + "redhat.vscode-xml", + "redhat.vscode-yaml" + ] +} \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000000..10ff03de6d --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,29 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "type": "PowerShell", + "request": "launch", + "name": "Build Playbook (Test)", + "script": "& '${workspaceFolder}/src/local-build.ps1' -AddLiveLog -ReplaceOldPlaybook -Removals WinverRequirement, Verification", + "cwd": "${workspaceFolder}/src/playbook", + "args": [] + }, + { + "type": "PowerShell", + "request": "launch", + "name": "Build Playbook (Test w/o deps)", + "script": "& '${workspaceFolder}/src/local-build.ps1' -AddLiveLog -ReplaceOldPlaybook -Removals Dependencies, WinverRequirement, Verification", + "cwd": "${workspaceFolder}/src/playbook", + "args": [] + }, + { + "type": "PowerShell", + "request": "launch", + "name": "Build Playbook (Release)", + "script": "& '${workspaceFolder}/src/local-build.ps1'", + "cwd": "${workspaceFolder}/src/playbook", + "args": [] + } + ] +} diff --git a/src/local-build.ps1 b/src/local-build.ps1 new file mode 100644 index 0000000000..a778c0d006 --- /dev/null +++ b/src/local-build.ps1 @@ -0,0 +1,140 @@ +param ( + [switch]$AddLiveLog, + [switch]$ReplaceOldPlaybook, + [switch]$DontOpenPbLocation, + [ValidateSet('Dependencies', 'Requirements', 'WinverRequirement', 'Verification', IgnoreCase = $true)] + [array]$Removals, + [string]$FileName = "Atlas Test" +) + +$removals | % { Set-Variable -Name "remove$_" -Value $true } + +# check 7z +if (Get-Command '7z' -EA 0) { + $7zPath = '7z' +} elseif (Get-Command '7zz' -EA 0) { + $7zPath = '7zz' +} elseif (!$IsLinux -and !$IsMacOS -and (Test-Path "$([Environment]::GetFolderPath('ProgramFiles'))\7-Zip\7z.exe")) { + $7zPath = "$([Environment]::GetFolderPath('ProgramFiles'))\7-Zip\7z.exe" +} else { + throw "This script requires 7-Zip to be installed to continue." +} + +# check if playbook dir +if (!(Test-Path playbook.conf -PathType Leaf)) { + if (Test-Path playbook -PathType Container) { + $currentDir = $PWD + Set-Location playbook + if (!(Test-Path playbook.conf -PathType Leaf)) { throw "playbook.conf file not found in playbook directory." } + } else { + throw "playbook.conf file not found in the current directory." + } +} + +# check if old files are in use +$apbxFileName = "$fileName.apbx" +function GetNewName { + $num = 1 + while (Test-Path -Path "$fileName ($num).apbx") { + $num++ + $script:apbxFileName = "$fileName ($num).abpx" + } +} +if ($replaceOldPlaybook -and (Test-Path -Path $apbxFileName)) { + try { + $stream = [System.IO.File]::Open("$PWD\$apbxFileName", 'Open', 'Read', 'Write') + $stream.Close() + Remove-Item -Path $apbxFileName -Force -EA 0 + } catch { + Write-Warning "Couldn't replace '$apbxFileName', it's in use." + GetNewName + } +} elseif (Test-Path -Path $apbxFileName) { + GetNewName +} +$apbxPath = "$PWD\$fileName.apbx" + +# make temp directories +$rootTemp = New-Item (Join-Path -Path $([System.IO.Path]::GetTempPath()) -ChildPath $([System.Guid]::NewGuid())) -ItemType Directory -Force +if (!(Test-Path -Path "$rootTemp")) { throw "Failed to create temporary directory!" } +$playbookTemp = New-Item "$rootTemp\playbook" -Type Directory + +try { + # remove entries in playbook config that make it awkward for testing + $patterns = @() + # 0.6.5 has a bug where it will crash without the 'Requirements' field, but all of the requirements are removed + # "" and # "" + if ($removeRequirements) {$patterns += ""} + if ($removeWinverRequirement) {$patterns += "", "", ""} + if ($removeVerification) {$patterns += ""} + + $tempPbConfPath = "$playbookTemp\playbook.conf" + if ($patterns.Count -gt 0) { + Get-Content "playbook.conf" | Where-Object { $_ -notmatch ($patterns -join '|') } | Set-Content $tempPbConfPath + } + + $customYmlPath = "Configuration\custom.yml" + $tempCustomYmlPath = "$playbookTemp\$customYmlPath" + if ($AddLiveLog) { + if (Test-Path $customYmlPath -PathType Leaf) { + New-Item (Split-Path $tempCustomYmlPath -Parent) -ItemType Directory -Force | Out-Null + Copy-Item -Path $customYmlPath -Destination $tempCustomYmlPath -Force + $customYml = Get-Content -Path $tempCustomYmlPath + + $actionsIndex = $customYml.IndexOf('actions:') + $newCustomYml = $customYml[0..$actionsIndex] + ` + " - !powerShell: {command: 'gc -Wait Logs\TIOutput.txt -EA 0 | Write-Output; pause', baseDir: true, wait: false}" + ` + $customYml[($actionsIndex + 1)..($customYml.Count)] + + Set-Content -Path $tempCustomYmlPath -Value $newCustomYml + } else { + Write-Error "Can't find "$customYmlPath", not adding live log." + } + } + + $startYmlPath = "Configuration\atlas\start.yml" + $tempStartYmlPath = "$playbookTemp\$startYmlPath" + if ($removeDependencies) { + if (Test-Path $startYmlPath -PathType Leaf) { + New-Item (Split-Path $tempStartYmlPath -Parent) -ItemType Directory -Force | Out-Null + Copy-Item -Path $startYmlPath -Destination $tempStartYmlPath -Force + $startYml = Get-Content -Path $tempStartYmlPath + + $noLocalBuildStart = $startYml.IndexOf(' ################ NO LOCAL BUILD ################') + $noLocalBuildEnd = $startYml.IndexOf(' ################ END NO LOCAL BUILD ################') + $newStartYml = $startYml[0..($noLocalBuildStart - 1)] + ` + $startYml[($noLocalBuildEnd + 1)..($startYml.Count)] + + Set-Content -Path $tempStartYmlPath -Value $newStartYml + } else { + Write-Error "Can't find "$startYmlPath", not removing dependencies." + } + } + + # exclude files + $excludeFiles = @( + "local-build.cmd", + "*.apbx" + ) + if (Test-Path $tempCustomYmlPath) { $excludeFiles += "custom.yml" } + if (Test-Path $tempStartYmlPath) { $excludeFiles += "start.yml" } + if (Test-Path $tempPbConfPath) { $excludeFiles += "playbook.conf" } + $files = "$rootTemp\7zFiles.txt" + (Get-ChildItem -File -Exclude $excludeFiles -Recurse).FullName | Resolve-Path -Relative | ForEach-Object {$_.Substring(2)} | Out-File $files -Encoding utf8 + + & $7zPath a -spf -y -mx1 -tzip "$apbxPath" `@"$files" | Out-Null + # add edited files + if (Test-Path "$playbookTemp\*.*") { + Push-Location "$playbookTemp" + & $7zPath u "$apbxPath" * | Out-Null + Pop-Location + } + + Write-Host "Built successfully! Path: `"$apbxPath`"" -ForegroundColor Green + if (!$IsLinux -and !$IsMacOS -and !$DontOpenPbLocation) { + explorer /select,"$apbxPath" + } +} finally { + Remove-Item $rootTemp -Force -EA 0 -Recurse | Out-Null + if ($currentDir) { Set-Location $currentDir } +} \ No newline at end of file diff --git a/src/playbook/Configuration/custom.yml b/src/playbook/Configuration/custom.yml index ccd3b6d213..a5c944ce11 100644 --- a/src/playbook/Configuration/custom.yml +++ b/src/playbook/Configuration/custom.yml @@ -2,10 +2,6 @@ title: Root Playbook File description: Runs all of the playbook files actions: - # AME Wizard Live Log for development playbooks - # Do not change the line position of this, otherwise things will break when using local-build - # - !run: {exe: 'cmd.exe', args: '/c start "AME Wizard Live Log" PowerShell -NoP -C "gc -Wait Logs\TIOutput.txt -EA SilentlyContinue | Write-Output; pause"', baseDir: true, wait: false} - # Check various conditions to see if the user should run Atlas or not - !powerShell: command: '.\UPGRADECHECK.ps1' diff --git a/src/playbook/local-build.cmd b/src/playbook/local-build.cmd index b41c6b168f..1084ba308e 100644 --- a/src/playbook/local-build.cmd +++ b/src/playbook/local-build.cmd @@ -1,253 +1,3 @@ -<# : batch portion -@echo off & PowerShell -NoP Get-Content """%~f0""" -Raw ^| iex & exit /b -: end batch / begin PowerShell #> - -# Do not change anything here, this is simply for reference -$defaultConfig = @{ - # Name of resulting APBX - fileName = "Atlas Test" - - # Should the script delete any playbook that already exists with the same name or not - # If not, it will make something like "Atlas Test (1).apbx" - replaceOldPlaybook = $true - - # Add AME Wizard Live Log window - liveLog = $true - - # Choose to get Atlas dependencies or not to speed up installation - removeDependencies = $true - - # Choose not to modify certain aspects from playbook.conf - removeRequirements = $false - removeWinverRequirement = $true - - # Not recommended to disable as it will show malicious - removeProductCode = $true -} - -$configPath = "$([Environment]::GetFolderPath('ApplicationData'))\local-build\config.json" - -# ------------- # -# config system # -# ------------- # - -$shortcut = "$([Environment]::GetFolderPath('LocalApplicationData'))\Microsoft\WindowsApps\ame-lb-conf.lnk" - -function New-ConfigPathShortcut { - $WshShell = New-Object -comObject WScript.Shell - $Shortcut = $WshShell.CreateShortcut($shortcut) - $Shortcut.TargetPath = $configPath - $Shortcut.Save() -} - -function CreateConfig($conf) { - New-Item -Type Directory -Force -Path $(Split-Path $configPath) -ErrorAction SilentlyContinue | Out-Null - $conf | ConvertTo-Json -Depth 100 | Out-File $configPath -} - -function Write-BulletPoint($message) { - $message | Foreach-Object { - Write-Host " - " -ForegroundColor Green -NoNewline - Write-Host $_ - } - Write-Host "" -} - - -if (Get-Command '7z.exe' -EA SilentlyContinue) { - $7zPath = '7z.exe' -} elseif (Test-Path "$([Environment]::GetFolderPath('ProgramFiles'))\7-Zip\7z.exe") { - $7zPath = "$([Environment]::GetFolderPath('ProgramFiles'))\7-Zip\7z.exe" -} -if (!$7zPath) { - Write-Host "This script requires 7-Zip to be installed to continue." - Pause - exit 1 -} - -if (!(Test-Path $configPath)) { - Remove-Item -Force -Path $shortcut -EA SilentlyContinue - - Write-Host "It seems like this is your first time using AME Local Build.`n" -ForegroundColor Cyan - - Write-BulletPoint "Adding config to %PATH% would allow you to type 'ame-lb-conf' into Run or any other shell and open the config." - Write-BulletPoint "The configuration is in JSON, and explanations of those arguments are contained in the script." - Write-BulletPoint "You can change the config path by modifying the script." - - - Write-Host "`n---------------------------------------------------------------------------------------------------------`n" -ForegroundColor Magenta - choice /c:yn /n /m "Would you like to add a shortcut to %PATH% for the configuration file? [Y/N]" - if ($LASTEXITCODE -eq 1) { New-ConfigPathShortcut } - - choice /c:yn /n /m "Would you like to open the config file now? [Y/N]" - CreateConfig $defaultConfig - if ($LASTEXITCODE -eq 1) { - Start-Process -FilePath "notepad.exe" -ArgumentList $configPath -Wait - } - Write-Host "" - - 3..1 | ForEach-Object { - Write-Host "`rCompleted, building playbook in $_... " -NoNewLine -ForegroundColor Yellow - Start-Sleep 1 - } -} - -# check if path shortcut matches config path -if (Test-Path $shortcut) { - if ($configPath -ne $(New-Object -ComObject WScript.Shell).CreateShortcut($shortcut).TargetPath) { New-ConfigPathShortcut } -} - -try { - $configNotHashtable = Get-Content $configPath | ConvertFrom-Json - # convert JSON config to hashtable - $config = @{}; foreach ($property in $configNotHashtable.PSObject.Properties) { $config[$property.Name] = $property.Value } -} catch { - Write-Host "Your configuration is corrupted." -ForegroundColor Yellow - choice /c:yn /n /m "Would you like to reset it? [Y/N]" - if ($LASTEXITCODE -eq 1) { - CreateConfig $defaultConfig - } else {exit 1} -} - -# update config -$defaultConfig.Keys | ForEach-Object { - if ($config.Keys -notcontains $_) { - $config = $config + @{ - $_ = $defaultConfig.$_ - } - $updateConfig = $true - } -} -if ($updateConfig) {CreateConfig $config} - -foreach ($a in $config.Keys) { - New-Variable -Name $a -Value $config.$a -} - -# ----------- # -# main script # -# ----------- # - -$apbxFileName = "$fileName.apbx" -$apbxPath = "$PWD\$fileName.apbx" - -if (!(Test-Path -Path "playbook.conf")) { - Write-Host "playbook.conf file not found in the current directory." -ForegroundColor Red - Start-Sleep 2 - exit 1 -} - -# check if old files are in use -$num = 1 -if (($replaceOldPlaybook) -and (Test-Path -Path $apbxFileName)) { - try { - $stream = [System.IO.File]::Open($apbxFileName, 'Open', 'Read', 'Write') - $stream.Close() - } catch { - while(Test-Path -Path "$fileName ($num).apbx") {$num++} - $apbxFileName = "$PWD\$fileName ($num).apbx" - } - Remove-Item -Path $apbxFileName -Force -EA 0 -} else { - if (Test-Path -Path $apbxFileName) { - while(Test-Path -Path "$fileName ($num).apbx") {$num++} - $apbxFileName = "$PWD\$fileName ($num).apbx" - } -} - -$zipFileName = Join-Path -Path $PWD -ChildPath $([System.IO.Path]::ChangeExtension($apbxFileName, "zip")) - -# remove old temp files -Remove-Item -Path $zipFileName -Force -EA 0 -if (!($?) -and (Test-Path -Path "$zipFileName")) { - Write-Host "Failed to delete temporary '$zipFileName' file!" -ForegroundColor Red - Start-Sleep 2 - exit 1 -} - -# make temp directories -$rootTemp = Join-Path -Path $env:TEMP -ChildPath $([System.IO.Path]::GetRandomFileName()) -New-Item $rootTemp -ItemType Directory -Force | Out-Null -if (!(Test-Path -Path "$rootTemp")) { - Write-Host "Failed to create temporary directory!" -ForegroundColor Red - Start-Sleep 2 - exit 1 -} -$configDir = "$rootTemp\playbook\Configuration\atlas" -New-Item $configDir -ItemType Directory -Force | Out-Null - -try { - $tempPlaybookConf = "$rootTemp\playbook\playbook.conf" - $ymlPath = "Configuration\custom.yml" - $tempStartYML = "$rootTemp\playbook\$ymlPath" - - # remove entries in playbook config that make it awkward for testing - $patterns = @() - # 0.6.5 has a bug where it will crash without the 'Requirements' field, but all of the requirements are removed - # "" and # "" - if ($removeRequirements) {$patterns += ""} - if ($removeWinverRequirement) {$patterns += "", "", ""} - if ($removeProductCode) {$patterns += ""} - - if ($patterns.Count -gt 0) { - $newContent = Get-Content "playbook.conf"| Where-Object { $_ -notmatch ($patterns -join '|') } - $newContent | Set-Content "$tempPlaybookConf" -Force - } - - if ($removeDependencies -or $liveLog) { - $startYML = "$PWD\$ymlPath" - if (Test-Path $startYML -PathType Leaf) { - Copy-Item -Path $startYML -Destination $tempStartYML -Force - - $content = Get-Content -Path $tempStartYML - - if ($liveLog) { - # uncomment the 8th line (6 in PowerShell because arrays are zero-based) - if ($content.Count -gt 6) { - $content[6] = $content[6] -replace ' #', '' - } - } - - if ($removeDependencies) { - # has to be raw for removing dependencies - $content = $content -join "`n" - - $startMarker = " ################ NO LOCAL BUILD ################" - $endMarker = " ################ END NO LOCAL BUILD ################" - - $startIndex = $content.IndexOf($startMarker) - $endIndex = $content.IndexOf($endMarker) - - if ($startIndex -ge 0 -and $endIndex -ge 0) { - $content = $content.Substring(0, $startIndex) + $content.Substring($endIndex + $endMarker.Length) - } - } - - Set-Content -Path $tempStartYML -Value $content - } - } - - $excludeFiles = @( - "local-build.cmd", - "*.apbx" - ) - if (Test-Path $tempStartYML) { $excludeFiles += "custom.yml" } - if (Test-Path $tempPlaybookConf) { $excludeFiles += "playbook.conf" } - - # make playbook, 7z is faster - if (Test-Path $apbxPath) { Remove-Item $apbxFileName -Force } - - (Get-ChildItem -File -Exclude $excludeFiles -Recurse).FullName ` - | Resolve-Path -Relative | ForEach-Object {$_.Substring(2)} | Out-File "$rootTemp\7zFiles.txt" -Encoding utf8 - - & $7zPath a -spf -y -mx1 -tzip "$apbxPath" `@"$rootTemp\7zFiles.txt" | Out-Null - # add edited files - Push-Location "$rootTemp\playbook" - & $7zPath u "$apbxPath" * | Out-Null - Pop-Location - - Write-Host "Build successfully! Path: `"$apbxPath`"" -ForegroundColor Green - Start-Sleep 1 -} finally { - Remove-Item $rootTemp -Force -EA 0 -Recurse | Out-Null -} \ No newline at end of file +@echo off +echo Building Playbook... +powershell -nop -ep bypass ^& "%cd%\..\local-build.ps1" -AddLiveLog -ReplaceOldPlaybook -Removals WinverRequirement, Verification -DontOpenPbLocation \ No newline at end of file From 7df4e93262cde315a6f40894fabb4a5bc5ed4245 Mon Sep 17 00:00:00 2001 From: he3als <65787561+he3als@users.noreply.github.com> Date: Fri, 7 Jun 2024 11:07:10 +0100 Subject: [PATCH 06/21] fix(apbx): new line linting --- .github/workflows/apbx.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/apbx.yaml b/.github/workflows/apbx.yaml index fdb91bb36b..0e8b9368a5 100644 --- a/.github/workflows/apbx.yaml +++ b/.github/workflows/apbx.yaml @@ -106,7 +106,7 @@ jobs: if: env.runSxsc == 'true' - name: Validate YAML files - run: 'yamllint -d "{extends: relaxed, rules: {empty-lines: disable, line-length: disable, new-line-at-end-of-file: disable, trailing-spaces: disable}}" src/playbook/.' + run: 'yamllint -d "{extends: relaxed, rules: {empty-lines: disable, line-length: disable, new-line-at-end-of-file: disable, trailing-spaces: disable, new-lines: {type: platform}}}" src\playbook\.' - name: Create playbook (ZIP/APBX password is malte) id: create-pb From 86271601cc1d8d90c9ab9c4b8df9559e4f3d3ee3 Mon Sep 17 00:00:00 2001 From: he3als <65787561+he3als@users.noreply.github.com> Date: Fri, 7 Jun 2024 11:09:01 +0100 Subject: [PATCH 07/21] refactor: test CI --- src/playbook/Configuration/custom.yml | 2 +- src/sxsc/Atlas-Defender-Remover-Arm.yaml | 8 ++++---- src/sxsc/Atlas-Defender-Remover.yaml | 8 ++++---- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/playbook/Configuration/custom.yml b/src/playbook/Configuration/custom.yml index a5c944ce11..01c2896c1b 100644 --- a/src/playbook/Configuration/custom.yml +++ b/src/playbook/Configuration/custom.yml @@ -1,6 +1,6 @@ --- title: Root Playbook File -description: Runs all of the playbook files +description: Runs all of the Playbook files actions: # Check various conditions to see if the user should run Atlas or not - !powerShell: diff --git a/src/sxsc/Atlas-Defender-Remover-Arm.yaml b/src/sxsc/Atlas-Defender-Remover-Arm.yaml index 8fa8b8f71e..11ad2555bb 100644 --- a/src/sxsc/Atlas-Defender-Remover-Arm.yaml +++ b/src/sxsc/Atlas-Defender-Remover-Arm.yaml @@ -348,17 +348,17 @@ updates: value: 'Off' # Disable SmartScreen for Edge - key_name: >- - HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\MicrosoftEdge\PhishingFilter + HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Edge perUserVirtualization: false values: - - key: EnabledV9 + - key: SmartScreenEnabled type: REG_DWORD value: 0 - key_name: >- - HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Edge + HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\MicrosoftEdge\PhishingFilter perUserVirtualization: false values: - - key: SmartScreenEnabled + - key: EnabledV9 type: REG_DWORD value: 0 # Disable 'Open file - Security Warning' Message diff --git a/src/sxsc/Atlas-Defender-Remover.yaml b/src/sxsc/Atlas-Defender-Remover.yaml index 5353e5b4f5..7b905d5d43 100644 --- a/src/sxsc/Atlas-Defender-Remover.yaml +++ b/src/sxsc/Atlas-Defender-Remover.yaml @@ -315,17 +315,17 @@ updates: value: 'Off' # Disable SmartScreen for Edge - key_name: >- - HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\MicrosoftEdge\PhishingFilter + HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Edge perUserVirtualization: false values: - - key: EnabledV9 + - key: SmartScreenEnabled type: REG_DWORD value: 0 - key_name: >- - HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Edge + HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\MicrosoftEdge\PhishingFilter perUserVirtualization: false values: - - key: SmartScreenEnabled + - key: EnabledV9 type: REG_DWORD value: 0 # Disable 'Open file - Security Warning' Message From badd6c8cc14d387a9dcdbea1116ea426c0999413 Mon Sep 17 00:00:00 2001 From: atlasos-admin <141822421+atlasos-admin@users.noreply.github.com> Date: Fri, 7 Jun 2024 10:09:46 +0000 Subject: [PATCH 08/21] feat: auto-update CAB packages (86271601) --- ...er-Package31bf3856ad364e35amd644.0.0.0.cab | Bin 43788 -> 43801 bytes ...er-Package31bf3856ad364e35arm644.0.0.0.cab | Bin 52276 -> 52254 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/src/playbook/Executables/AtlasModules/Packages/Z-Atlas-NoDefender-Package31bf3856ad364e35amd644.0.0.0.cab b/src/playbook/Executables/AtlasModules/Packages/Z-Atlas-NoDefender-Package31bf3856ad364e35amd644.0.0.0.cab index 391ea4eb41d0413ef9d24d543c7cbd8732ddc58f..ea409d88b22970b9fc594cd75737215f4e982e55 100644 GIT binary patch delta 28988 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 literal 52276 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 MF)ialp#S;(U*QLz9RL6T From 76cffc96104b5b9182363614ecc61c6a6af0fad9 Mon Sep 17 00:00:00 2001 From: he3als <65787561+he3als@users.noreply.github.com> Date: Fri, 7 Jun 2024 11:11:12 +0100 Subject: [PATCH 09/21] fix(apbx): duplicate file name --- .github/workflows/apbx.yaml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/apbx.yaml b/.github/workflows/apbx.yaml index 0e8b9368a5..d9599215a0 100644 --- a/.github/workflows/apbx.yaml +++ b/.github/workflows/apbx.yaml @@ -4,6 +4,7 @@ on: push: paths: - "src/**" + - ".github/workflows/apbx.yaml" env: SXSC_REPO: "https://github.com/Atlas-OS/sxsc" @@ -113,10 +114,10 @@ jobs: if: ${{ !startsWith(github.ref, 'refs/heads/na-') }} run: | echo "Making a renamed password protected (malte) ZIP of playbook files..." - $pbName = "Atlas Playbook $($env:GITHUB_SHA.Substring(0,8)).apbx" + $pbName = "Atlas Playbook $($env:GITHUB_SHA.Substring(0,8))" & ..\local-build.ps1 -ReplaceOldPlaybook -AddLiveLog -Removals Verification, WinverRequirement -FileName $pbName echo "Move the .abpx playbook into 'Release ZIP' to be released as an artifact with the additional files..." - Move-Item $pbName "../release-zip" + Move-Item "$pbName.apbx" "../release-zip" working-directory: src\playbook - name: Upload artifact From 8a4d96ff2b36568195de61c64a51804e9a7c6c0e Mon Sep 17 00:00:00 2001 From: he3als <65787561+he3als@users.noreply.github.com> Date: Fri, 7 Jun 2024 12:34:16 +0100 Subject: [PATCH 10/21] feat(apbx): check all yaml --- .github/ISSUE_TEMPLATE/bug_report.yml | 132 +++++++++++---------- .github/ISSUE_TEMPLATE/feature_request.yml | 94 ++++++++------- .github/workflows/apbx.yaml | 2 +- .github/workflows/labeler.yaml | 6 +- 4 files changed, 119 insertions(+), 115 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 543cba7b91..a8d2782275 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -1,77 +1,79 @@ name: Bug report description: Create a bug report to help us improve Atlas. +title: "[BUG] - " + labels: - bug -title: "[BUG] - " -body: - - type: checkboxes - attributes: - label: Before continuing... - description: Please ensure you meet the following criteria. If not, the maintainers reserve the right to close and lock your issue. - options: - - label: "I agree to follow Atlas' [Code of Conduct](https://github.com/Atlas-OS/.github/blob/main/profile/CODE_OF_CONDUCT.md)" - required: true - - label: "I have searched our [issue tracker](https://github.com/Atlas-OS/Atlas/issues?q=is%3Aissue) to verify that the issue hasn't been reported already" - required: true - - label: "I have searched the [Atlas documentation](https://docs.atlasos.net) beforehand for a solution" - required: true - - label: "I am on the latest version of Atlas, and didn't do an unsupported upgrade" - required: true - - type: textarea - attributes: - label: Description - description: A short description of the bug. - validations: +body: +- type: checkboxes + attributes: + label: Before continuing... + description: Please ensure you meet the following criteria. If not, the maintainers reserve the right to close and lock your issue. + options: + - label: "I agree to follow Atlas' [Code of Conduct](https://github.com/Atlas-OS/.github/blob/main/profile/CODE_OF_CONDUCT.md)" required: true - - - type: textarea - attributes: - label: Steps to reproduce - description: The steps required to reproduce this bug (add screenshots if applicable). - placeholder: | - 1. [First step] (Screenshot 1) - 2. [Second step] (Screenshot 2) - 3. [And so on...] (Screenshot X) - validations: + - label: "I have searched our [issue tracker](https://github.com/Atlas-OS/Atlas/issues?q=is%3Aissue) to verify that the issue hasn't been reported already" required: true - - - type: textarea - attributes: - label: Expected behavior - description: What you expect to happen (add screenshots if applicable). - validations: + - label: "I have searched the [Atlas documentation](https://docs.atlasos.net) beforehand for a solution" required: true - - - type: textarea - attributes: - label: Actual behavior - description: What actually happened (add screenshots if applicable). - validations: + - label: "I am on the latest version of Atlas, and didn't do an unsupported upgrade" required: true - - type: dropdown - attributes: - label: Atlas Edition - options: - - Atlas for Windows 10 22H2 - - Atlas for Windows 11 23H2 - validations: - required: true +- type: textarea + attributes: + label: Description + description: A short description of the bug. + validations: + required: true - - type: textarea - attributes: - label: Desktop information - description: Your hardware specification is needed for us to define the problem. - placeholder: | - - Processor [include brand and specs] - - RAM [include size and generation] - - Storage [include size, brand, and type] - - GPU [include brand, specs, driver version] - validations: - required: true +- type: textarea + attributes: + label: Steps to reproduce + description: The steps required to reproduce this bug (add screenshots if applicable). + placeholder: | + 1. [First step] (Screenshot 1) + 2. [Second step] (Screenshot 2) + 3. [And so on...] (Screenshot X) + validations: + required: true + +- type: textarea + attributes: + label: Expected behavior + description: What you expect to happen (add screenshots if applicable). + validations: + required: true + +- type: textarea + attributes: + label: Actual behavior + description: What actually happened (add screenshots if applicable). + validations: + required: true + +- type: dropdown + attributes: + label: Atlas Edition + options: + - Atlas for Windows 10 22H2 + - Atlas for Windows 11 23H2 + validations: + required: true + +- type: textarea + attributes: + label: Desktop information + description: Your hardware specification is needed for us to define the problem. + placeholder: | + - Processor [include brand and specs] + - RAM [include size and generation] + - Storage [include size, brand, and type] + - GPU [include brand, specs, driver version] + validations: + required: true - - type: textarea - attributes: - label: Additional content - description: Anything you want to add. +- type: textarea + attributes: + label: Additional content + description: Anything you want to add. diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml index 89caceb6e0..e8c72adb26 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.yml +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -1,56 +1,58 @@ name: Feature request description: Create a feature request to help us improve Atlas. +title: "[FEATURE] - " + labels: - enhancement -title: "[FEATURE] - " -body: - - type: checkboxes - attributes: - label: Before continuing... - description: Please ensure you meet the following criteria. If not, the maintainers reserve the right to close and lock your issue. - options: - - label: "I agree to follow Atlas' [Code of Conduct](https://github.com/Atlas-OS/.github/blob/main/profile/CODE_OF_CONDUCT.md)" - required: true - - label: "I have searched our [issue tracker](https://github.com/Atlas-OS/Atlas/issues?q=is%3Aissue) to verify that the issue hasn't been reported already" - required: true - - label: "I have searched the [Atlas documentation](https://docs.atlasos.net) beforehand for a solution" - required: true - - label: "I am on the latest version of Atlas, and didn't do an unsupported upgrade" - required: true - - type: dropdown - attributes: - label: What is your feature request regarding to? - options: - - Atlas Playbook - - Other (submit it in https://forum.atlasos.net) - validations: +body: +- type: checkboxes + attributes: + label: Before continuing... + description: Please ensure you meet the following criteria. If not, the maintainers reserve the right to close and lock your issue. + options: + - label: "I agree to follow Atlas' [Code of Conduct](https://github.com/Atlas-OS/.github/blob/main/profile/CODE_OF_CONDUCT.md)" required: true - - - type: textarea - attributes: - label: Is your feature request related to a problem? Please describe. - placeholder: | - e.g. I always wanted Atlas to... - validations: + - label: "I have searched our [issue tracker](https://github.com/Atlas-OS/Atlas/issues?q=is%3Aissue) to verify that the issue hasn't been reported already" required: true - - - type: textarea - attributes: - label: Describe the solution you would like. - placeholder: | - e.g. I would like Atlas to add... - validations: + - label: "I have searched the [Atlas documentation](https://docs.atlasos.net) beforehand for a solution" required: true - - - type: textarea - attributes: - label: Describe alternatives you have considered. - description: If you have found a temporary fix, list it here. - validations: + - label: "I am on the latest version of Atlas, and didn't do an unsupported upgrade" required: true - - type: textarea - attributes: - label: Additional context. - description: Add any other context or screenshots about the feature request here. +- type: dropdown + attributes: + label: What is your feature request regarding to? + options: + - Atlas Playbook + - Other (submit it in https://forum.atlasos.net) + validations: + required: true + +- type: textarea + attributes: + label: Is your feature request related to a problem? Please describe. + placeholder: | + e.g. I always wanted Atlas to... + validations: + required: true + +- type: textarea + attributes: + label: Describe the solution you would like. + placeholder: | + e.g. I would like Atlas to add... + validations: + required: true + +- type: textarea + attributes: + label: Describe alternatives you have considered. + description: If you have found a temporary fix, list it here. + validations: + required: true + +- type: textarea + attributes: + label: Additional context. + description: Add any other context or screenshots about the feature request here. diff --git a/.github/workflows/apbx.yaml b/.github/workflows/apbx.yaml index d9599215a0..463c28b957 100644 --- a/.github/workflows/apbx.yaml +++ b/.github/workflows/apbx.yaml @@ -107,7 +107,7 @@ jobs: if: env.runSxsc == 'true' - name: Validate YAML files - run: 'yamllint -d "{extends: relaxed, rules: {empty-lines: disable, line-length: disable, new-line-at-end-of-file: disable, trailing-spaces: disable, new-lines: {type: platform}}}" src\playbook\.' + run: 'yamllint -d "{extends: relaxed, rules: {empty-lines: disable, line-length: disable, new-line-at-end-of-file: disable, trailing-spaces: disable, new-lines: {type: platform}}}" .' - name: Create playbook (ZIP/APBX password is malte) id: create-pb diff --git a/.github/workflows/labeler.yaml b/.github/workflows/labeler.yaml index fc7162f499..f01d9b5c59 100644 --- a/.github/workflows/labeler.yaml +++ b/.github/workflows/labeler.yaml @@ -6,8 +6,8 @@ on: jobs: filter: permissions: - contents: read - pull-requests: write + contents: read + pull-requests: write runs-on: ubuntu-latest steps: - - uses: actions/labeler@v4 + - uses: actions/labeler@v4 From f60af11dcacf71228eb097de99d1a7d679a3371d Mon Sep 17 00:00:00 2001 From: he3als <65787561+he3als@users.noreply.github.com> Date: Fri, 7 Jun 2024 12:42:36 +0100 Subject: [PATCH 11/21] feat(apbx): validate YAML first --- .github/workflows/apbx.yaml | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/.github/workflows/apbx.yaml b/.github/workflows/apbx.yaml index 463c28b957..51fce75cdd 100644 --- a/.github/workflows/apbx.yaml +++ b/.github/workflows/apbx.yaml @@ -3,8 +3,9 @@ name: Create and Validate Atlas Playbook on: push: paths: - - "src/**" - - ".github/workflows/apbx.yaml" + - "src/playbook/**" + - "**/*.yaml" + - "**/*.yml" env: SXSC_REPO: "https://github.com/Atlas-OS/sxsc" @@ -20,6 +21,9 @@ jobs: ref: ${{ github.ref }} token: ${{ secrets.RUNNER_SECRET }} + - name: Validate YAML files + run: 'yamllint -d "{extends: relaxed, rules: {empty-lines: disable, line-length: disable, new-line-at-end-of-file: disable, trailing-spaces: disable, new-lines: {type: platform}}}" .' + - name: Get changed files id: changed-files uses: tj-actions/changed-files@v41.0.0 @@ -106,9 +110,6 @@ jobs: working-directory: src\playbook\Executables\AtlasModules\Packages if: env.runSxsc == 'true' - - name: Validate YAML files - run: 'yamllint -d "{extends: relaxed, rules: {empty-lines: disable, line-length: disable, new-line-at-end-of-file: disable, trailing-spaces: disable, new-lines: {type: platform}}}" .' - - name: Create playbook (ZIP/APBX password is malte) id: create-pb if: ${{ !startsWith(github.ref, 'refs/heads/na-') }} From 6efdfade1e3bfb0daa268c948f622165e4e08298 Mon Sep 17 00:00:00 2001 From: thePineapple Date: Sat, 8 Jun 2024 22:35:16 +1000 Subject: [PATCH 12/21] fix: Slideshow wallpaper issues (#1116) --- .../Scripts/ScriptWrappers/DisablePowerSaving.ps1 | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/playbook/Executables/AtlasModules/Scripts/ScriptWrappers/DisablePowerSaving.ps1 b/src/playbook/Executables/AtlasModules/Scripts/ScriptWrappers/DisablePowerSaving.ps1 index 431a1e6013..9f86e5b0a1 100644 --- a/src/playbook/Executables/AtlasModules/Scripts/ScriptWrappers/DisablePowerSaving.ps1 +++ b/src/playbook/Executables/AtlasModules/Scripts/ScriptWrappers/DisablePowerSaving.ps1 @@ -35,8 +35,6 @@ powercfg /setacvalueindex scheme_current 0012ee47-9041-4b5d-9b77-535fba8b1442 d3 powercfg /setacvalueindex scheme_current 0012ee47-9041-4b5d-9b77-535fba8b1442 d639518a-e56d-4345-8af2-b9f32fb26109 0 ## NVME NOPPME - Off powercfg /setacvalueindex scheme_current 0012ee47-9041-4b5d-9b77-535fba8b1442 fc7372b6-ab2d-43ee-8797-15e9841f2cca 0 -## Slide show - Paused -powercfg /setacvalueindex scheme_current 0d7dbae2-4294-402a-ba8e-26777e8488cd 309dce9b-bef4-4119-9921-a851fb12f0f4 1 ## Hub Selective Suspend Timeout - 0 miliseconds powercfg /setacvalueindex scheme_current 2a737441-1930-4402-8d77-b2bebba308a3 0853a681-27c8-4100-a2fd-82013e970683 0 ## USB selective suspend - Disabled @@ -132,4 +130,4 @@ New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Power\PowerThrott bcdedit /set disabledynamictick yes | Out-Null if ($Silent) { exit } -$null = Read-Host "`nCompleted.`nPress Enter to exit" \ No newline at end of file +$null = Read-Host "`nCompleted.`nPress Enter to exit" From 3aac4b82d7bf9d4fd0e9347cb6d3eeeb61e6b53d Mon Sep 17 00:00:00 2001 From: he3als <65787561+he3als@users.noreply.github.com> Date: Sat, 8 Jun 2024 14:27:08 +0100 Subject: [PATCH 13/21] feat: rewrite path setting --- src/playbook/Configuration/atlas/start.yml | 26 ++++++++++++++-------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/src/playbook/Configuration/atlas/start.yml b/src/playbook/Configuration/atlas/start.yml index 3c6ae4ae51..a493d5b030 100644 --- a/src/playbook/Configuration/atlas/start.yml +++ b/src/playbook/Configuration/atlas/start.yml @@ -6,19 +6,27 @@ actions: - !powerShell: wait: true command: >- - $modulesPath = """$([Environment]::GetFolderPath('Windows'))\AtlasModules"""; + function Add-ToPath ([array]$Paths) { + $machine = [System.EnvironmentVariableTarget]::Machine; + $seperator = [IO.Path]::PathSeparator; + + $Paths | ForEach-Object { + if (!(Test-Path $_ -PathType Container)) { + Write-Error """Path '$_' doesn't exist as a container.""" + } + }; - function AddToVar($env, $value) { - $a = [IO.Path]::PathSeparator; - $b = [System.EnvironmentVariableTarget]::Machine; - $c = [Environment]::GetEnvironmentVariables($b); + $newPath = @(); + $newPath += [Environment]::GetEnvironmentVariable('PATH', $machine) -split $seperator; + if ($newPath.Count -eq 0) { Write-Warning 'The PATH variable is currently empty.' }; + $newPath += $Paths; + $newPath = $newPath | Where-Object { $_ } | Select-Object -Unique; - [Environment]::SetEnvironmentVariable($env, - ("""$($c.'Path');$value""" -replace ';',"""$a"""), - $b); + [Environment]::SetEnvironmentVariable('PATH', """$($newPath -join $seperator)""", $machine); }; - AddToVar 'Path' """$modulesPath;$modulesPath\Apps;$modulesPath\Other;$modulesPath\Tools;$modulesPath\Scripts"""; + $modulesPath = """$([Environment]::GetFolderPath('Windows'))\AtlasModules"""; + Add-ToPath """$modulesPath""", """$modulesPath\Apps""", """$modulesPath\Other""", """$modulesPath\Tools""", """$modulesPath\Scripts"""; ################ NO LOCAL BUILD ################ From b00f6d2a85687977307cf990a38995caa4d2f957 Mon Sep 17 00:00:00 2001 From: he3als <65787561+he3als@users.noreply.github.com> Date: Sat, 8 Jun 2024 14:53:40 +0100 Subject: [PATCH 14/21] feat(vscode): format playbook.conf as xml --- .vscode/settings.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.vscode/settings.json b/.vscode/settings.json index 15a6b6a3e6..b3cbe8ef91 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -13,4 +13,7 @@ "!powerShell: mapping", "!writeStatus: mapping" ], + "files.associations": { + "playbook.conf": "xml" + } } \ No newline at end of file From 9fb62fd3c1360bb8c2a7c4f9d6bc38bd4f882d1d Mon Sep 17 00:00:00 2001 From: he3als <65787561+he3als@users.noreply.github.com> Date: Sat, 8 Jun 2024 15:19:47 +0100 Subject: [PATCH 15/21] fix(local-build): fix when apbx already exists --- src/local-build.ps1 | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/local-build.ps1 b/src/local-build.ps1 index a778c0d006..daa96fad5b 100644 --- a/src/local-build.ps1 +++ b/src/local-build.ps1 @@ -34,8 +34,7 @@ if (!(Test-Path playbook.conf -PathType Leaf)) { # check if old files are in use $apbxFileName = "$fileName.apbx" function GetNewName { - $num = 1 - while (Test-Path -Path "$fileName ($num).apbx") { + while (Test-Path -Path $apbxFileName) { $num++ $script:apbxFileName = "$fileName ($num).abpx" } @@ -52,7 +51,7 @@ if ($replaceOldPlaybook -and (Test-Path -Path $apbxFileName)) { } elseif (Test-Path -Path $apbxFileName) { GetNewName } -$apbxPath = "$PWD\$fileName.apbx" +$apbxPath = "$PWD\$apbxFileName" # make temp directories $rootTemp = New-Item (Join-Path -Path $([System.IO.Path]::GetTempPath()) -ChildPath $([System.Guid]::NewGuid())) -ItemType Directory -Force From 0756892932d55624b4e1b549829504987d63aa87 Mon Sep 17 00:00:00 2001 From: he3als <65787561+he3als@users.noreply.github.com> Date: Sat, 8 Jun 2024 15:32:25 +0100 Subject: [PATCH 16/21] feat(local-build): password --- src/local-build.ps1 | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/local-build.ps1 b/src/local-build.ps1 index daa96fad5b..86e313b52d 100644 --- a/src/local-build.ps1 +++ b/src/local-build.ps1 @@ -2,6 +2,7 @@ param ( [switch]$AddLiveLog, [switch]$ReplaceOldPlaybook, [switch]$DontOpenPbLocation, + [switch]$NoPassword, [ValidateSet('Dependencies', 'Requirements', 'WinverRequirement', 'Verification', IgnoreCase = $true)] [array]$Removals, [string]$FileName = "Atlas Test" @@ -121,11 +122,12 @@ try { $files = "$rootTemp\7zFiles.txt" (Get-ChildItem -File -Exclude $excludeFiles -Recurse).FullName | Resolve-Path -Relative | ForEach-Object {$_.Substring(2)} | Out-File $files -Encoding utf8 - & $7zPath a -spf -y -mx1 -tzip "$apbxPath" `@"$files" | Out-Null + if (!$NoPassword) { $pass = '-p"malte"' } + & $7zPath a -spf -y -mx1 $pass -tzip "$apbxPath" `@"$files" | Out-Null # add edited files if (Test-Path "$playbookTemp\*.*") { Push-Location "$playbookTemp" - & $7zPath u "$apbxPath" * | Out-Null + & $7zPath u $pass "$apbxPath" * | Out-Null Pop-Location } From 3bf577af95e86a5fe8398098c10a268ae2ca4613 Mon Sep 17 00:00:00 2001 From: he3als <65787561+he3als@users.noreply.github.com> Date: Sat, 8 Jun 2024 16:13:50 +0100 Subject: [PATCH 17/21] fix(local-build): live log --- src/local-build.ps1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/local-build.ps1 b/src/local-build.ps1 index 86e313b52d..f5a085b3d9 100644 --- a/src/local-build.ps1 +++ b/src/local-build.ps1 @@ -83,7 +83,7 @@ try { $actionsIndex = $customYml.IndexOf('actions:') $newCustomYml = $customYml[0..$actionsIndex] + ` - " - !powerShell: {command: 'gc -Wait Logs\TIOutput.txt -EA 0 | Write-Output; pause', baseDir: true, wait: false}" + ` + " - !cmd: {command: 'start `"AME Wizard Live Log`" PowerShell -NoP -C `"gc -Wait ..\..\..\Logs\TIOutput.txt -EA 0 | Write-Output; pause`"', exeDir: true}" + ` $customYml[($actionsIndex + 1)..($customYml.Count)] Set-Content -Path $tempCustomYmlPath -Value $newCustomYml From 93ed8d7262e8633215865c4f04b33da7e2ebd1c5 Mon Sep 17 00:00:00 2001 From: he3als <65787561+he3als@users.noreply.github.com> Date: Sat, 8 Jun 2024 16:14:13 +0100 Subject: [PATCH 18/21] fix(fileassoc): only do 7zip if it's installed --- src/playbook/Executables/FILEASSOC.cmd | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/playbook/Executables/FILEASSOC.cmd b/src/playbook/Executables/FILEASSOC.cmd index d587ae0c1a..d442d158d4 100644 --- a/src/playbook/Executables/FILEASSOC.cmd +++ b/src/playbook/Executables/FILEASSOC.cmd @@ -36,9 +36,10 @@ if "%~1" == "Brave" set "associations=%baseAssociations% %braveAssociations%" if "%~1" == "LibreWolf" set "associations=%baseAssociations% %libreWolfAssociations%" if "%~1" == "Firefox" set "associations=%baseAssociations% %firefoxAssociations%" if "%~1" == "Google Chrome" set "associations=%baseAssociations% %chromeAssociations%" +if exist "%ProgramFiles%\7-Zip\7zFM.exe" set 7zip=y :: Set 7-Zip assocations -call :7ZIPSYSTEM +if "%7zip%"=="y" call :7ZIPSYSTEM :: Make a temporary renamed PowerShell executable to bypass UCPD :: https://hitco.at/blog/windows-userchoice-protection-driver-ucpd/ @@ -52,7 +53,7 @@ copy /y "%powershellPath%" "%powershellTemp%" > nul for /f "usebackq tokens=2 delims=\" %%a in (`reg query HKU ^| findstr /r /x /c:"HKEY_USERS\\S-.*" /c:"HKEY_USERS\\AME_UserHive_[^_]*"`) do ( reg query "HKU\%%a" | findstr /c:"Volatile Environment" /c:"AME_UserHive_" > nul && ( echo Setting associations for "%%a"... - call :7ZIPUSER "%%a" + if "%7zip%"=="y" call :7ZIPUSER "%%a" "%powershellTemp%" -NoP -NonI -EP Bypass -File ASSOC.ps1 "Placeholder" "%%a" %associations% ) ) From f398a460f91139cfcce22368251aece37ae2951b Mon Sep 17 00:00:00 2001 From: he3als <65787561+he3als@users.noreply.github.com> Date: Sat, 8 Jun 2024 16:16:15 +0100 Subject: [PATCH 19/21] fix(start): don't remove windows media player --- src/playbook/Configuration/atlas/start.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/playbook/Configuration/atlas/start.yml b/src/playbook/Configuration/atlas/start.yml index a493d5b030..a3d8614a49 100644 --- a/src/playbook/Configuration/atlas/start.yml +++ b/src/playbook/Configuration/atlas/start.yml @@ -42,10 +42,6 @@ actions: - !writeStatus: {status: 'Disabling Steps Recorder'} - !run: {exe: 'DISM.exe', args: '/Online /Remove-Capability /CapabilityName:"App.StepsRecorder~~~~0.0.1.0" /NoRestart', weight: 30} - - !writeStatus: {status: 'Disabling Legacy Media Player'} - - !run: {exe: 'DISM.exe', args: '/Online /Disable-Feature /FeatureName:"WindowsMediaPlayer" /NoRestart', weight: 30} - - !run: {exe: 'DISM.exe', args: '/Online /Remove-Capability /CapabilityName:"Media.WindowsMediaPlayer~~~~0.0.12.0" /NoRestart', weight: 30} - # Initial software # 7-Zip, Visual C++ Runtimes, DirectX - !writeStatus: {status: 'Installing utilities'} From de28d5d71b72194cde4eade679cb76827cfe9b1b Mon Sep 17 00:00:00 2001 From: he3als <65787561+he3als@users.noreply.github.com> Date: Mon, 10 Jun 2024 14:42:29 +0100 Subject: [PATCH 20/21] fix: replace wmic (deprecated) --- .../Power/CPU Idle/Disable Idle.cmd | 5 ++--- .../7. Security/Mitigations/Enable All Mitigations.cmd | 10 ++++------ .../Network/Reset Network to Atlas Default.cmd | 2 +- 3 files changed, 7 insertions(+), 10 deletions(-) diff --git a/src/playbook/Executables/AtlasDesktop/3. General Configuration/Power/CPU Idle/Disable Idle.cmd b/src/playbook/Executables/AtlasDesktop/3. General Configuration/Power/CPU Idle/Disable Idle.cmd index 6d8f3681ad..1cb8d688f2 100644 --- a/src/playbook/Executables/AtlasDesktop/3. General Configuration/Power/CPU Idle/Disable Idle.cmd +++ b/src/playbook/Executables/AtlasDesktop/3. General Configuration/Power/CPU Idle/Disable Idle.cmd @@ -1,9 +1,8 @@ @echo off :: Check if hyper threading is enabled -for /f "tokens=2 delims==" %%a in ('wmic cpu get NumberOfCores /value') do set "PHYSICAL_CORES=%%a" -for /f "tokens=2 delims==" %%a in ('wmic cpu get NumberOfLogicalProcessors /value') do set "LOGICAL_CORES=%%a" -if "%LOGICAL_CORES%" GTR "%PHYSICAL_CORES%" goto :hyperThreading +powershell -NonI -NoP -C "$proc = Get-CimInstance Win32_Processor; if ([int]$proc.NumberOfLogicalProcessors -gt [int]$proc.NumberOfCores) { exit 262 }" +if "%errorlevel%"=="262" goto :hyperThreading if "%~1" neq "/silent" ( echo This forces your CPU to work at its maximum speed always, ensure you have good cooling. diff --git a/src/playbook/Executables/AtlasDesktop/7. Security/Mitigations/Enable All Mitigations.cmd b/src/playbook/Executables/AtlasDesktop/7. Security/Mitigations/Enable All Mitigations.cmd index 9f229895e0..48648ef8f8 100644 --- a/src/playbook/Executables/AtlasDesktop/7. Security/Mitigations/Enable All Mitigations.cmd +++ b/src/playbook/Executables/AtlasDesktop/7. Security/Mitigations/Enable All Mitigations.cmd @@ -20,12 +20,10 @@ whoami /user | find /i "S-1-5-18" > nul 2>&1 || ( :main :: Enable Spectre and Meltdown reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v "FeatureSettingsOverrideMask" /t REG_DWORD /d "3" /f > nul -wmic cpu get name | findstr "Intel" > nul && ( - reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v "FeatureSettingsOverride" /t REG_DWORD /d "0" /f > nul -) -wmic cpu get name | findstr "AMD" > nul && ( - reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v "FeatureSettingsOverride" /t REG_DWORD /d "64" /f > nul -) +powershell -NonI -NoP -C "$proc = (Get-CimInstance Win32_Processor).Name; $env:CPU = if ($proc | sls 'Intel' -Quiet) {'0'} elseif ($proc | sls 'AMD' -Quiet) {'64'}" +if "%CPU%" neq "" ( + reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v "FeatureSettingsOverride" /t REG_DWORD /d "%CPU%" /f > nul +) :: Enable Structured Exception Handling Overwrite Protection (SEHOP) reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\kernel" /v "DisableExceptionChainValidation" /t REG_DWORD /d "0" /f > nul diff --git a/src/playbook/Executables/AtlasDesktop/8. Troubleshooting/Network/Reset Network to Atlas Default.cmd b/src/playbook/Executables/AtlasDesktop/8. Troubleshooting/Network/Reset Network to Atlas Default.cmd index a47e341376..da65ab5787 100644 --- a/src/playbook/Executables/AtlasDesktop/8. Troubleshooting/Network/Reset Network to Atlas Default.cmd +++ b/src/playbook/Executables/AtlasDesktop/8. Troubleshooting/Network/Reset Network to Atlas Default.cmd @@ -14,7 +14,7 @@ fltmc > nul 2>&1 || ( echo Setting network settings to Atlas defaults... :: Set network adapter driver registry key -for /f %%a in ('wmic path Win32_NetworkAdapter get PNPDeviceID^| findstr /L "PCI\VEN_"') do ( +for /f "usebackq" %%a in (`powershell -NonI -NoP -C "(Get-CimInstance Win32_NetworkAdapter).PNPDeviceID | sls 'PCI\\VEN_'"`) do ( for /f "tokens=3" %%b in ('reg query "HKLM\SYSTEM\CurrentControlSet\Enum\%%a" /v "Driver"') do ( set "netKey=HKLM\SYSTEM\CurrentControlSet\Control\Class\%%b" ) > nul 2>&1 From d630f5c9c41e145f11ec1e004f3e2e1a48236d94 Mon Sep 17 00:00:00 2001 From: he3als <65787561+he3als@users.noreply.github.com> Date: Mon, 10 Jun 2024 16:36:21 +0100 Subject: [PATCH 21/21] fix(local-build): support for runner 7z version --- src/local-build.ps1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/local-build.ps1 b/src/local-build.ps1 index f5a085b3d9..85bd4bbbd1 100644 --- a/src/local-build.ps1 +++ b/src/local-build.ps1 @@ -122,7 +122,7 @@ try { $files = "$rootTemp\7zFiles.txt" (Get-ChildItem -File -Exclude $excludeFiles -Recurse).FullName | Resolve-Path -Relative | ForEach-Object {$_.Substring(2)} | Out-File $files -Encoding utf8 - if (!$NoPassword) { $pass = '-p"malte"' } + if (!$NoPassword) { $pass = '-pmalte' } & $7zPath a -spf -y -mx1 $pass -tzip "$apbxPath" `@"$files" | Out-Null # add edited files if (Test-Path "$playbookTemp\*.*") {