From 01620659e712064603b4e7de98033d68cb33762a Mon Sep 17 00:00:00 2001 From: Alex Lowe Date: Thu, 15 Aug 2024 12:45:37 -0400 Subject: [PATCH] build!: remove Windows support --- .github/ISSUE_TEMPLATE/bug.yaml | 3 +- appveyor.yml | 74 ---------- snapcraft.spec | 62 -------- tests/unit/store/test_client.py | 11 -- tests/unit/test_utils.py | 13 -- tools/freeze-requirements.sh | 6 - tools/version.py | 21 +-- windows/AppxManifest.xml | 44 ------ windows/generate-self-signed-cert.ps1 | 3 - windows/modpath.iss | 196 -------------------------- windows/snapcraft.ico | Bin 32126 -> 0 bytes windows/snapcraft.iss | 53 ------- windows/snapcraft.png | Bin 14280 -> 0 bytes 13 files changed, 2 insertions(+), 484 deletions(-) delete mode 100644 appveyor.yml delete mode 100644 snapcraft.spec delete mode 100644 windows/AppxManifest.xml delete mode 100644 windows/generate-self-signed-cert.ps1 delete mode 100644 windows/modpath.iss delete mode 100644 windows/snapcraft.ico delete mode 100644 windows/snapcraft.iss delete mode 100644 windows/snapcraft.png diff --git a/.github/ISSUE_TEMPLATE/bug.yaml b/.github/ISSUE_TEMPLATE/bug.yaml index 26bcf446cb..8d718b33d6 100644 --- a/.github/ISSUE_TEMPLATE/bug.yaml +++ b/.github/ISSUE_TEMPLATE/bug.yaml @@ -33,8 +33,7 @@ body: description: > We need to know a bit more about the context in which Snapcraft failed. - Are you running Snapcraft in destructive-mode, using LXD or Multipass. - - On what system is Snapcraft running (e.g.; Ubuntu 22.04 LTS, Windows 11, - OS X 10.15). + - On what system is Snapcraft running (e.g.; Ubuntu 24.04 LTS, OS X 10.15). validations: required: true - type: textarea diff --git a/appveyor.yml b/appveyor.yml deleted file mode 100644 index 7f4a447663..0000000000 --- a/appveyor.yml +++ /dev/null @@ -1,74 +0,0 @@ -image: Visual Studio 2019 -environment: - INNOCC: C:\Program Files (x86)\Inno Setup 6\iscc.exe - MAKEAPPX: C:\Program Files (x86)\Windows Kits\10\bin\10.0.18362.0\x64\makeappx.exe - SIGNTOOL: C:\Program Files (x86)\Windows Kits\10\bin\10.0.18362.0\x64\signtool.exe - SNAPCRAFT_INSTALLED_EXE: C:\Program Files (x86)\Snapcraft for Windows\snapcraft.exe - TIMESTAMP_SERVICE: http://timestamp.digicert.com - - matrix: - - PYTHON: C:\Python310-x64 - -cache: -- '%LOCALAPPDATA%\pip\Cache\http' -- '%LOCALAPPDATA%\pip\Cache\wheels' -build: off - -install: -- cmd: | - %PYTHON%\python.exe -m venv venv - venv\Scripts\activate.bat - python -c "import sys; print(sys.executable)" - python -m pip install -r requirements-devel.txt - python -m pip install --prefix %VIRTUAL_ENV% -e . - venv\Scripts\deactivate.bat - -build_script: -- cmd: | - echo "Building snapcraft.exe..." - venv\Scripts\activate.bat - pyinstaller.exe snapcraft.spec - venv\Scripts\deactivate.bat - - echo "Test signing snapcraft.exe..." - powershell.exe windows\generate-self-signed-cert.ps1 - "%SIGNTOOL%" sign /fd SHA256 /td SHA256 /tr "%TIMESTAMP_SERVICE%" /f test-signing.pfx /p Password1234 dist\snapcraft.exe - - echo "Setting Snapcraft version..." - venv\Scripts\activate.bat - python -m tools.version set-snapcraft-iss - venv\Scripts\deactivate.bat - echo "Building snapcraft inno installer..." - "%INNOCC%" windows\snapcraft.iss - - copy dist\snapcraft-installer.exe dist\snapcraft-installer-self-signed.exe - echo "Test signing snapcraft inno installer..." - "%SIGNTOOL%" sign /fd SHA256 /td SHA256 /tr "%TIMESTAMP_SERVICE%" /f test-signing.pfx /p Password1234 dist\snapcraft-installer-self-signed.exe - - echo "Building snapcraft msix installer..." - mkdir dist\msix - copy dist\snapcraft.exe dist\msix\ - copy windows\snapcraft.png dist\msix\ - copy windows\AppxManifest.xml dist\msix\ - "%MAKEAPPX%" pack /h SHA256 /d dist\msix /p dist\snapcraft-installer.msix - - echo "Test signing snapcraft msix installer..." - "%SIGNTOOL%" sign /fd SHA256 /td SHA256 /tr "%TIMESTAMP_SERVICE%" /f test-signing.pfx /p Password1234 dist\snapcraft-installer.msix - -test_script: -- cmd: | - echo "Smoke testing snapcraft.exe..." - dist\snapcraft.exe version - mkdir test - cd test - ..\dist\snapcraft.exe init - cd .. - - echo "Smoke testing snapcraft-installer-self-signed.exe..." - start /wait "SNAPCRAFT INSTALLER" dist\snapcraft-installer-self-signed.exe /VERYSILENT /ALLUSERS - "%SNAPCRAFT_INSTALLED_EXE%" version - -artifacts: -#- path: dist\snapcraft.exe -- path: dist\snapcraft-installer.exe -#- path: dist\snapcraft-installer.msix diff --git a/snapcraft.spec b/snapcraft.spec deleted file mode 100644 index b036c773aa..0000000000 --- a/snapcraft.spec +++ /dev/null @@ -1,62 +0,0 @@ -# -*- mode: python ; coding: utf-8 -*- -from PyInstaller.utils.hooks import collect_data_files, copy_metadata - -block_cipher = None - -data = [ - ("extensions", os.path.join("share", "snapcraft", "extensions")), - ("keyrings", os.path.join("share", "snapcraft", "keyrings")), - ("schema", os.path.join("share", "snapcraft", "schema")), - ] -data += collect_data_files("launchpadlib") -data += collect_data_files("lazr.restfulclient") -data += collect_data_files("lazr.uri") -data += collect_data_files("wadllib") -data += copy_metadata("launchpadlib") -data += copy_metadata("lazr.restfulclient") -data += copy_metadata("lazr.uri") -data += copy_metadata("wadllib") - -a = Analysis( - ["snapcraft\\__main__.py"], - pathex=[], - binaries=[], - datas=data, - hiddenimports=[ - "cffi", - "click", - "configparser", - "pkg_resources", - # Workaround PyInstaller & SetupTools, https://github.com/pypa/setuptools/issues/1963 - "pkg_resources.py2_warn", - "pymacaroons", - "responses", - ], - hookspath=[], - runtime_hooks=[], - excludes=[], - win_no_prefer_redirects=False, - win_private_assemblies=False, - cipher=block_cipher, - noarchive=False, -) - -pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher) - -exe = EXE( - pyz, - a.scripts, - a.binaries, - a.zipfiles, - a.datas, - [], - name="snapcraft", - debug=False, - bootloader_ignore_signals=False, - strip=False, - upx=True, - upx_exclude=[], - runtime_tmpdir=None, - console=True, - icon="windows/snapcraft.ico", -) diff --git a/tests/unit/store/test_client.py b/tests/unit/store/test_client.py index 359067bf9b..263d15a3e6 100644 --- a/tests/unit/store/test_client.py +++ b/tests/unit/store/test_client.py @@ -200,17 +200,6 @@ def test_useragent_linux_with_testing(monkeypatch, testing_env): ) -@pytest.mark.parametrize("testing_env", ("TRAVIS_TESTING", "AUTOPKGTEST_TMP")) -def test_useragent_windows_with_testing(monkeypatch, testing_env): - """Construct a user-agent as a patched Windows machine""" - monkeypatch.setenv(testing_env, "1") - os_platform = OSPlatform(system="Windows", release="10", machine="AMD64") - - assert client.build_user_agent(version="7.1.0", os_platform=os_platform) == ( - "snapcraft/7.1.0 (testing) Windows/10 (AMD64)" - ) - - ##################### # Store Environment # ##################### diff --git a/tests/unit/test_utils.py b/tests/unit/test_utils.py index 3d9dbdd9e8..18fd311314 100644 --- a/tests/unit/test_utils.py +++ b/tests/unit/test_utils.py @@ -156,19 +156,6 @@ def test_get_os_platform_alternative_formats(tmp_path, mocker, name): assert os_platform.system == result -def test_get_os_platform_windows(mocker): - """Get platform from a patched Windows machine.""" - mocker.patch("platform.system", return_value="Windows") - mocker.patch("platform.release", return_value="10") - mocker.patch("platform.machine", return_value="AMD64") - - os_platform = utils.get_os_platform() - - assert os_platform.system == "Windows" - assert os_platform.release == "10" - assert os_platform.machine == "AMD64" - - @pytest.mark.parametrize( "platform_machine,platform_architecture,deb_arch", [ diff --git a/tools/freeze-requirements.sh b/tools/freeze-requirements.sh index c33eea2153..5abe5b4c51 100755 --- a/tools/freeze-requirements.sh +++ b/tools/freeze-requirements.sh @@ -9,12 +9,6 @@ requirements_fixups() { # https://bugs.launchpad.net/ubuntu/+source/python-pip/+bug/1635463 sed -i '/pkg[-_]resources==0.0.0/d' "$req_file" - - # Pinned pyinstaller for windows. - if [[ "$req_file" == "requirements-devel.txt" ]]; then - sed -i '/pyinstaller/d' "$req_file" - echo 'pyinstaller==5.13.1; sys.platform == "win32"' >> "$req_file" - fi } venv_dir="$(mktemp -d)" diff --git a/tools/version.py b/tools/version.py index 672d508a92..fc416bf699 100755 --- a/tools/version.py +++ b/tools/version.py @@ -15,11 +15,8 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -import fileinput import os -import pathlib import subprocess -import sys def determine_version(): @@ -59,21 +56,5 @@ def determine_version(): return f"{version}.post{distance}+git{commit[1:]}" -def set_snapcraft_iss(): - snapcraft_iss_path = pathlib.Path("windows/snapcraft.iss") - assert ( - snapcraft_iss_path.exists() - ), f"Run from project root and ensure {snapcraft_iss_path!s} exists." - with fileinput.input(str(snapcraft_iss_path), inplace=True) as iss_file: - for line in iss_file: - if line.startswith("AppVersion="): - print(f"AppVersion={determine_version()}") - else: - print(line, end="") - - if __name__ == "__main__": - if len(sys.argv) == 2 and sys.argv[1] == "set-snapcraft-iss": - set_snapcraft_iss() - else: - print(determine_version()) + print(determine_version()) diff --git a/windows/AppxManifest.xml b/windows/AppxManifest.xml deleted file mode 100644 index 8fc6d60afb..0000000000 --- a/windows/AppxManifest.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - - - Snapcraft - Canonical Ltd. - snapcraft.png - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/windows/generate-self-signed-cert.ps1 b/windows/generate-self-signed-cert.ps1 deleted file mode 100644 index 3a4faac71b..0000000000 --- a/windows/generate-self-signed-cert.ps1 +++ /dev/null @@ -1,3 +0,0 @@ -$cert = New-SelfSignedCertificate -Subject "CN=test-signing.snapcraft.io" -Type CodeSigning -CertStoreLocation "Cert:\CurrentUser\My" -$CertPassword = ConvertTo-SecureString -String "Password1234" -Force -AsPlainText -Export-PfxCertificate -Cert "cert:\CurrentUser\My\$($cert.Thumbprint)" -FilePath "test-signing.pfx" -Password $CertPassword \ No newline at end of file diff --git a/windows/modpath.iss b/windows/modpath.iss deleted file mode 100644 index 456d156a54..0000000000 --- a/windows/modpath.iss +++ /dev/null @@ -1,196 +0,0 @@ -// ---------------------------------------------------------------------------- -// -// Inno Setup Ver: 5.4.2 -// Script Version: 1.4.2 -// Author: Jared Breland -// Homepage: http://www.legroom.net/software -// License: GNU Lesser General Public License (LGPL), version 3 -// http://www.gnu.org/licenses/lgpl.html -// -// Script Function: -// Allow modification of environmental path directly from Inno Setup installers -// -// Instructions: -// Copy modpath.iss to the same directory as your setup script -// -// Add this statement to your [Setup] section -// ChangesEnvironment=true -// -// Add this statement to your [Tasks] section -// You can change the Description or Flags -// You can change the Name, but it must match the ModPathName setting below -// Name: modifypath; Description: &Add application directory to your environmental path; Flags: unchecked -// -// Add the following to the end of your [Code] section -// ModPathName defines the name of the task defined above -// ModPathType defines whether the 'user' or 'system' path will be modified; -// this will default to user if anything other than system is set -// setArrayLength must specify the total number of dirs to be added -// Result[0] contains first directory, Result[1] contains second, etc. -// const -// ModPathName = 'modifypath'; -// ModPathType = 'user'; -// -// function ModPathDir(): TArrayOfString; -// begin -// setArrayLength(Result, 1); -// Result[0] := ExpandConstant('{app}'); -// end; -// #include "modpath.iss" -// ---------------------------------------------------------------------------- - -procedure ModPath(); -var - oldpath: String; - newpath: String; - updatepath: Boolean; - pathArr: TArrayOfString; - aExecFile: String; - aExecArr: TArrayOfString; - i, d: Integer; - pathdir: TArrayOfString; - regroot: Integer; - regpath: String; - -begin - // Get constants from main script and adjust behavior accordingly - // ModPathType MUST be 'system' or 'user'; force 'user' if invalid - if ModPathType = 'system' then begin - regroot := HKEY_LOCAL_MACHINE; - regpath := 'SYSTEM\CurrentControlSet\Control\Session Manager\Environment'; - end else begin - regroot := HKEY_CURRENT_USER; - regpath := 'Environment'; - end; - - // Get array of new directories and act on each individually - pathdir := ModPathDir(); - for d := 0 to GetArrayLength(pathdir)-1 do begin - updatepath := true; - - // Modify WinNT path - if UsingWinNT() = true then begin - - // Get current path, split into an array - RegQueryStringValue(regroot, regpath, 'Path', oldpath); - oldpath := oldpath + ';'; - i := 0; - - while (Pos(';', oldpath) > 0) do begin - SetArrayLength(pathArr, i+1); - pathArr[i] := Copy(oldpath, 0, Pos(';', oldpath)-1); - oldpath := Copy(oldpath, Pos(';', oldpath)+1, Length(oldpath)); - i := i + 1; - - // Check if current directory matches app dir - if pathdir[d] = pathArr[i-1] then begin - // if uninstalling, remove dir from path - if IsUninstaller() = true then begin - continue; - // if installing, flag that dir already exists in path - end else begin - updatepath := false; - end; - end; - - // Add current directory to new path - if i = 1 then begin - newpath := pathArr[i-1]; - end else begin - newpath := newpath + ';' + pathArr[i-1]; - end; - end; - - // Append app dir to path if not already included - if (IsUninstaller() = false) AND (updatepath = true) then - newpath := newpath + ';' + pathdir[d]; - - // Write new path - RegWriteStringValue(regroot, regpath, 'Path', newpath); - - // Modify Win9x path - end else begin - - // Convert to shortened dirname - pathdir[d] := GetShortName(pathdir[d]); - - // If autoexec.bat exists, check if app dir already exists in path - aExecFile := 'C:\AUTOEXEC.BAT'; - if FileExists(aExecFile) then begin - LoadStringsFromFile(aExecFile, aExecArr); - for i := 0 to GetArrayLength(aExecArr)-1 do begin - if IsUninstaller() = false then begin - // If app dir already exists while installing, skip add - if (Pos(pathdir[d], aExecArr[i]) > 0) then - updatepath := false; - break; - end else begin - // If app dir exists and = what we originally set, then delete at uninstall - if aExecArr[i] = 'SET PATH=%PATH%;' + pathdir[d] then - aExecArr[i] := ''; - end; - end; - end; - - // If app dir not found, or autoexec.bat didn't exist, then (create and) append to current path - if (IsUninstaller() = false) AND (updatepath = true) then begin - SaveStringToFile(aExecFile, #13#10 + 'SET PATH=%PATH%;' + pathdir[d], True); - - // If uninstalling, write the full autoexec out - end else begin - SaveStringsToFile(aExecFile, aExecArr, False); - end; - end; - end; -end; - -// Split a string into an array using passed delimiter -procedure MPExplode(var Dest: TArrayOfString; Text: String; Separator: String); -var - i: Integer; -begin - i := 0; - repeat - SetArrayLength(Dest, i+1); - if Pos(Separator,Text) > 0 then begin - Dest[i] := Copy(Text, 1, Pos(Separator, Text)-1); - Text := Copy(Text, Pos(Separator,Text) + Length(Separator), Length(Text)); - i := i + 1; - end else begin - Dest[i] := Text; - Text := ''; - end; - until Length(Text)=0; -end; - -procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep); -var - aSelectedTasks: TArrayOfString; - i: Integer; - taskname: String; - regpath: String; - regstring: String; - appid: String; -begin - // only run during actual uninstall - if CurUninstallStep = usUninstall then begin - // get list of selected tasks saved in registry at install time - appid := '{#emit SetupSetting("AppId")}'; - if appid = '' then appid := '{#emit SetupSetting("AppName")}'; - regpath := ExpandConstant('Software\Microsoft\Windows\CurrentVersion\Uninstall\'+appid+'_is1'); - RegQueryStringValue(HKLM, regpath, 'Inno Setup: Selected Tasks', regstring); - if regstring = '' then RegQueryStringValue(HKCU, regpath, 'Inno Setup: Selected Tasks', regstring); - - // check each task; if matches modpath taskname, trigger patch removal - if regstring <> '' then begin - taskname := ModPathName; - MPExplode(aSelectedTasks, regstring, ','); - if GetArrayLength(aSelectedTasks) > 0 then begin - for i := 0 to GetArrayLength(aSelectedTasks)-1 do begin - if comparetext(aSelectedTasks[i], taskname) = 0 then - ModPath(); - end; - end; - end; - end; -end; diff --git a/windows/snapcraft.ico b/windows/snapcraft.ico deleted file mode 100644 index fd0db9d0420807052ec91d8e2e2b74a618a6beb4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32126 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℞bkAIC}n14TAw{HN2>nbj8O?w!6PJ!caK>xk}g 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 P00000NkvXXu0mjfpp9ir diff --git a/windows/snapcraft.iss b/windows/snapcraft.iss deleted file mode 100644 index c00fbcd1f1..0000000000 --- a/windows/snapcraft.iss +++ /dev/null @@ -1,53 +0,0 @@ -[Setup] -AppId={{05E40DED-CE0A-437E-B90C-25A32B47880F} -AppName=Snapcraft (Preview) for Windows -AppVersion=VERSION -AppPublisher=Canonical Ltd. -AppPublisherURL=https://snapcraft.io/ -AppSupportURL=https://snapcraft.io/ -AppUpdatesURL=https://snapcraft.io/ -DefaultDirName={autopf}\Snapcraft for Windows -DisableProgramGroupPage=yes -LicenseFile=..\COPYING -PrivilegesRequired=lowest -PrivilegesRequiredOverridesAllowed=dialog -SetupIconFile=snapcraft.ico -Compression=lzma -SolidCompression=yes -WizardStyle=modern -OutputBaseFilename=snapcraft-installer -OutputDir=..\dist -ChangesEnvironment=yes - -[Languages] -Name: "english"; MessagesFile: "compiler:Default.isl" - -[Tasks] -Name: modifypath; Description: "Add snapcraft to the current user's PATH (Recommended)" - -[Files] -Source: "..\dist\snapcraft.exe"; DestDir: "{app}"; Flags: ignoreversion - -[Code] -const - ModPathName = 'modifypath'; - ModPathType = 'user'; - -function ModPathDir(): TArrayOfString; -begin - SetArrayLength(Result, 1); - Result[0] := ExpandConstant('{app}'); -end; -#include "modpath.iss" - -procedure CurStepChanged(CurStep: TSetupStep); -var - Success: Boolean; -begin - Success := True; - if CurStep = ssPostInstall then - begin - if WizardIsTaskSelected(ModPathName) then - ModPath(); - end; -end; diff --git a/windows/snapcraft.png b/windows/snapcraft.png deleted file mode 100644 index 3d7405d88397d577630a8aebe0f273913e282bf5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14280 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


tv}0bzj1v+Upzs5^huQ#%e&uuQq~QZ+Z2lj=oiV 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