Add app source and tests
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
151
lib/Peach/about/external/data/EnvCheck.dart
vendored
Normal file
151
lib/Peach/about/external/data/EnvCheck.dart
vendored
Normal file
@@ -0,0 +1,151 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
/// A tool/runtime PeachDeployments can detect on a server and install if
|
||||
/// missing. [detect] prints a version line to stdout when present, nothing
|
||||
/// otherwise (guarded by `command -v`). [pkg] maps a package manager to the
|
||||
/// package(s) to install. [unit] is a systemd unit to `enable --now` after.
|
||||
class EnvTool {
|
||||
final String key;
|
||||
final String label;
|
||||
final IconData icon;
|
||||
final String detect;
|
||||
final Map<String, String> pkg;
|
||||
final String? unit;
|
||||
|
||||
const EnvTool(
|
||||
this.key,
|
||||
this.label,
|
||||
this.icon,
|
||||
this.detect,
|
||||
this.pkg, {
|
||||
this.unit,
|
||||
});
|
||||
|
||||
String packagesFor(String pm) => pkg[pm] ?? key;
|
||||
}
|
||||
|
||||
const List<EnvTool> kEnvTools = [
|
||||
EnvTool(
|
||||
'java',
|
||||
'Java (JDK)',
|
||||
Icons.coffee,
|
||||
'command -v java >/dev/null 2>&1 && java -version 2>&1 | head -n1',
|
||||
{
|
||||
'apt': 'openjdk-17-jdk',
|
||||
'dnf': 'java-17-openjdk-devel',
|
||||
'yum': 'java-17-openjdk-devel',
|
||||
'apk': 'openjdk17',
|
||||
'zypper': 'java-17-openjdk-devel',
|
||||
'pacman': 'jdk-openjdk',
|
||||
},
|
||||
),
|
||||
EnvTool(
|
||||
'mariadb',
|
||||
'MariaDB / MySQL',
|
||||
Icons.storage,
|
||||
'(command -v mariadb >/dev/null 2>&1 && mariadb --version 2>&1 | head -n1) || '
|
||||
'(command -v mysql >/dev/null 2>&1 && mysql --version 2>&1 | head -n1)',
|
||||
{
|
||||
'apt': 'mariadb-server',
|
||||
'dnf': 'mariadb-server',
|
||||
'yum': 'mariadb-server',
|
||||
'apk': 'mariadb mariadb-client',
|
||||
'zypper': 'mariadb',
|
||||
'pacman': 'mariadb',
|
||||
},
|
||||
unit: 'mariadb',
|
||||
),
|
||||
EnvTool(
|
||||
'postgres',
|
||||
'PostgreSQL',
|
||||
Icons.dataset,
|
||||
'command -v psql >/dev/null 2>&1 && psql --version 2>&1 | head -n1',
|
||||
{
|
||||
'apt': 'postgresql',
|
||||
'dnf': 'postgresql-server',
|
||||
'yum': 'postgresql-server',
|
||||
'apk': 'postgresql',
|
||||
'zypper': 'postgresql-server',
|
||||
'pacman': 'postgresql',
|
||||
},
|
||||
unit: 'postgresql',
|
||||
),
|
||||
EnvTool(
|
||||
'nginx',
|
||||
'nginx',
|
||||
Icons.dns,
|
||||
'command -v nginx >/dev/null 2>&1 && nginx -v 2>&1 | head -n1',
|
||||
{
|
||||
'apt': 'nginx',
|
||||
'dnf': 'nginx',
|
||||
'yum': 'nginx',
|
||||
'apk': 'nginx',
|
||||
'zypper': 'nginx',
|
||||
'pacman': 'nginx',
|
||||
},
|
||||
unit: 'nginx',
|
||||
),
|
||||
EnvTool(
|
||||
'docker',
|
||||
'Docker',
|
||||
Icons.inventory_2,
|
||||
'command -v docker >/dev/null 2>&1 && docker --version 2>&1 | head -n1',
|
||||
{
|
||||
'apt': 'docker.io',
|
||||
'dnf': 'docker',
|
||||
'yum': 'docker',
|
||||
'apk': 'docker',
|
||||
'zypper': 'docker',
|
||||
'pacman': 'docker',
|
||||
},
|
||||
unit: 'docker',
|
||||
),
|
||||
EnvTool(
|
||||
'node',
|
||||
'Node.js',
|
||||
Icons.javascript,
|
||||
'command -v node >/dev/null 2>&1 && node --version 2>&1 | head -n1',
|
||||
{
|
||||
'apt': 'nodejs npm',
|
||||
'dnf': 'nodejs',
|
||||
'yum': 'nodejs',
|
||||
'apk': 'nodejs npm',
|
||||
'zypper': 'nodejs',
|
||||
'pacman': 'nodejs npm',
|
||||
},
|
||||
),
|
||||
EnvTool(
|
||||
'git',
|
||||
'Git',
|
||||
Icons.merge_type,
|
||||
'command -v git >/dev/null 2>&1 && git --version 2>&1 | head -n1',
|
||||
{
|
||||
'apt': 'git',
|
||||
'dnf': 'git',
|
||||
'yum': 'git',
|
||||
'apk': 'git',
|
||||
'zypper': 'git',
|
||||
'pacman': 'git',
|
||||
},
|
||||
),
|
||||
];
|
||||
|
||||
/// Builds the install command for a detected package manager.
|
||||
String installCommandFor(String pm, String packages) {
|
||||
switch (pm) {
|
||||
case 'apt':
|
||||
return 'apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y $packages';
|
||||
case 'dnf':
|
||||
return 'dnf install -y $packages';
|
||||
case 'yum':
|
||||
return 'yum install -y $packages';
|
||||
case 'apk':
|
||||
return 'apk add --no-cache $packages';
|
||||
case 'zypper':
|
||||
return 'zypper --non-interactive install $packages';
|
||||
case 'pacman':
|
||||
return 'pacman -Sy --noconfirm $packages';
|
||||
default:
|
||||
return 'echo "Unsupported package manager"; false';
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user