**Related issue:** Resolves #41470 Adds support for uploading Python (`.py`) script-only software packages — accepted as script-only (the file contents become the install script; advanced options and automatic install follow `.sh`/`.ps1`), assigned the new `py_packages` source, and installable on macOS and Linux hosts across the UI, REST API, and GitOps. Feature branch combining the backend (#48942) and frontend (#48946) sub-PRs. # Checklist for submitter - [x] Changes file added for user-visible changes in `changes/`, `orbit/changes/` or `ee/fleetd-chrome/changes`. - [x] Input data is properly validated, `SELECT *` is avoided, SQL injection is prevented (using placeholders for values in statements), JS inline code is prevented especially for url redirects, and untrusted data interpolated into shell scripts/commands is validated against shell metacharacters. ## Testing - [x] Added/updated automated tests - [x] QA'd all new/changed functionality manually <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Added support for Python (`.py`) script-only software packages across UI uploads, API/self-service installs, and GitOps parsing. * Python installers now derive metadata correctly and render the proper Python icon, with install eligibility for macOS & Linux. * **Bug Fixes** * Improved installer-script validation and “supported file types” error messages to include `.py` (and consistent handling of related script fields/options). * **Tests** * Expanded unit, integration, and GitOps tests to cover Python package parsing, metadata derivation, platform/host eligibility, and UI rendering. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
41 lines
1.0 KiB
TypeScript
41 lines
1.0 KiB
TypeScript
import { getExtensionFromFileName } from "./file/fileUtils";
|
|
|
|
// @ts-ignore
|
|
import uninstallPkg from "../../pkg/file/scripts/uninstall_pkg.sh";
|
|
// @ts-ignore
|
|
import uninstallMsi from "../../pkg/file/scripts/uninstall_msi_with_upgrade_code.ps1";
|
|
// @ts-ignore
|
|
import uninstallDeb from "../../pkg/file/scripts/uninstall_deb.sh";
|
|
// @ts-ignore
|
|
import uninstallRPM from "../../pkg/file/scripts/uninstall_rpm.sh";
|
|
|
|
/*
|
|
* getUninstallScript returns a string with a script to uninstall the
|
|
* provided software.
|
|
* */
|
|
const getDefaultUninstallScript = (fileName: string): string => {
|
|
const extension = getExtensionFromFileName(fileName);
|
|
|
|
switch (extension) {
|
|
case "pkg":
|
|
return uninstallPkg;
|
|
case "msi":
|
|
return uninstallMsi;
|
|
case "deb":
|
|
return uninstallDeb;
|
|
case "rpm":
|
|
return uninstallRPM;
|
|
case "exe":
|
|
case "tar.gz":
|
|
case "sh":
|
|
case "ps1":
|
|
case "py":
|
|
case "ipa":
|
|
return "";
|
|
default:
|
|
throw new Error(`unsupported file extension: ${extension}`);
|
|
}
|
|
};
|
|
|
|
export default getDefaultUninstallScript;
|