Compare commits
14 Commits
46e2859d28
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 835ec06d15 | |||
| ed3cc44eaf | |||
| e4529610ea | |||
| 753b346c1e | |||
| bd3054eecf | |||
| 7ac18b07e4 | |||
| c858c1f601 | |||
| a16d691fc0 | |||
| d2daea094f | |||
| eb62a4bbcb | |||
| 6523c8408e | |||
| 782aa4c680 | |||
| 24164c8042 | |||
| 7554f59037 |
129
.drone.yml
Normal file
129
.drone.yml
Normal file
@@ -0,0 +1,129 @@
|
|||||||
|
kind: pipeline
|
||||||
|
type: kubernetes
|
||||||
|
name: Build on Multiple Distributions
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: clone-repo
|
||||||
|
image: alpine/git
|
||||||
|
commands:
|
||||||
|
- git clone https://gitea.akshun-lab.uk/akshun/rust-setup.git /artifacts
|
||||||
|
volumes:
|
||||||
|
- name: artifacts
|
||||||
|
path: /artifacts
|
||||||
|
|
||||||
|
- name: build-on-arch
|
||||||
|
image: archlinux:latest
|
||||||
|
depends_on: [clone-repo]
|
||||||
|
commands:
|
||||||
|
- pacman -Syu --noconfirm
|
||||||
|
- pacman -S --noconfirm rustup gcc
|
||||||
|
- rustup default stable
|
||||||
|
- cd /artifacts
|
||||||
|
- cargo build --release
|
||||||
|
- cp /artifacts/target/release/setup /artifacts/
|
||||||
|
- mv /artifacts/setup /artifacts/arch-setup
|
||||||
|
volumes:
|
||||||
|
- name: artifacts
|
||||||
|
path: /artifacts
|
||||||
|
|
||||||
|
- name: build-on-debian
|
||||||
|
image: debian:stable
|
||||||
|
depends_on: [clone-repo]
|
||||||
|
commands:
|
||||||
|
- apt update && apt upgrade -y
|
||||||
|
- apt install -y curl gcc
|
||||||
|
- curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
|
||||||
|
- . $HOME/.cargo/env
|
||||||
|
- cd /artifacts
|
||||||
|
- cargo build --release
|
||||||
|
- cp /artifacts/target/release/setup /artifacts/
|
||||||
|
- mv /artifacts/setup /artifacts/debian-setup
|
||||||
|
volumes:
|
||||||
|
- name: artifacts
|
||||||
|
path: /artifacts
|
||||||
|
|
||||||
|
- name: build-on-fedora
|
||||||
|
image: fedora:latest
|
||||||
|
depends_on: [clone-repo]
|
||||||
|
commands:
|
||||||
|
- dnf up -y
|
||||||
|
- dnf install curl gcc -y
|
||||||
|
- curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
|
||||||
|
- . $HOME/.cargo/env
|
||||||
|
- cd /artifacts
|
||||||
|
- cargo build --release
|
||||||
|
- cp /artifacts/target/release/setup /artifacts/
|
||||||
|
- mv /artifacts/setup /artifacts/fedora-setup
|
||||||
|
volumes:
|
||||||
|
- name: artifacts
|
||||||
|
path: /artifacts
|
||||||
|
|
||||||
|
|
||||||
|
- name: upload-to-gitea
|
||||||
|
image: alpine/curl
|
||||||
|
depends_on: [build-on-debian, build-on-arch, build-on-fedora]
|
||||||
|
commands:
|
||||||
|
- apk add curl jq
|
||||||
|
- |
|
||||||
|
# Ensure required variables are set
|
||||||
|
if [ -z "$GITEA_TOKEN" ] || [ -z "$GITEA_SERVER" ]; then
|
||||||
|
echo "Error: GITEA_TOKEN or GITEA_SERVER not set"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
# Set repo path (fallback if DRONE_REPO is not set)
|
||||||
|
REPO_PATH="${DRONE_REPO:-akshun/setup-script}"
|
||||||
|
|
||||||
|
# Create or get release
|
||||||
|
if [ -n "${DRONE_TAG}" ]; then
|
||||||
|
echo "Creating release for tag ${DRONE_TAG}"
|
||||||
|
response=$(curl -s -X POST \
|
||||||
|
-H "Authorization: token $GITEA_TOKEN" \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d '{"tag_name": "'"${DRONE_TAG}"'", "name": "'"${DRONE_TAG}"'", "body": "Automated release"}' \
|
||||||
|
"$GITEA_SERVER/api/v1/repos/$REPO_PATH/releases")
|
||||||
|
release_id=$(echo "$response" | jq -r '.id')
|
||||||
|
else
|
||||||
|
echo "Using latest release"
|
||||||
|
# Try to get latest release
|
||||||
|
response=$(curl -s -H "Authorization: token $GITEA_TOKEN" \
|
||||||
|
"$GITEA_SERVER/api/v1/repos/$REPO_PATH/releases/latest" || echo "")
|
||||||
|
|
||||||
|
if [ -z "$response" ] || [ "$(echo "$response" | jq -r '.id')" = "null" ]; then
|
||||||
|
# Create a new draft release if none exists
|
||||||
|
echo "Creating new draft release"
|
||||||
|
response=$(curl -s -X POST \
|
||||||
|
-H "Authorization: token $GITEA_TOKEN" \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d '{"tag_name": "continuous", "name": "Continuous Build", "draft": true, "body": "Automated continuous build"}' \
|
||||||
|
"$GITEA_SERVER/api/v1/repos/$REPO_PATH/releases")
|
||||||
|
fi
|
||||||
|
|
||||||
|
release_id=$(echo "$response" | jq -r '.id')
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Upload artifacts
|
||||||
|
for artifact in /artifacts/*-setup; do
|
||||||
|
if [ -f "$artifact" ]; then
|
||||||
|
filename=$(basename "$artifact")
|
||||||
|
echo "Uploading $filename to Gitea release $release_id"
|
||||||
|
curl -X POST \
|
||||||
|
-H "Authorization: token $GITEA_TOKEN" \
|
||||||
|
-H "Content-Type: multipart/form-data" \
|
||||||
|
-F "attachment=@$artifact" \
|
||||||
|
"$GITEA_SERVER/api/v1/repos/$REPO_PATH/releases/$release_id/assets?name=$filename"
|
||||||
|
else
|
||||||
|
echo "No artifacts found matching /artifacts/*-setup"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
environment:
|
||||||
|
GITEA_TOKEN:
|
||||||
|
from_secret: gitea-token
|
||||||
|
GITEA_SERVER:
|
||||||
|
from_secret: gitea-server
|
||||||
|
volumes:
|
||||||
|
- name: artifacts
|
||||||
|
path: /artifacts
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
- name: artifacts
|
||||||
|
temp: {}
|
||||||
@@ -1,102 +0,0 @@
|
|||||||
name: Build on Multiple Distributions
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- main
|
|
||||||
pull_request:
|
|
||||||
branches:
|
|
||||||
- main
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build-on-arch:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
container:
|
|
||||||
image: archlinux:latest
|
|
||||||
steps:
|
|
||||||
|
|
||||||
- name: Install basic dependencies
|
|
||||||
run: |
|
|
||||||
pacman -Syu --noconfirm
|
|
||||||
pacman -S --noconfirm git nodejs npm
|
|
||||||
|
|
||||||
- name: Checkout code
|
|
||||||
run: |
|
|
||||||
git clone https://akshun-gitlab.uk/aggarwalakshun/rust-setup.git .
|
|
||||||
git checkout $GITEA_SHA
|
|
||||||
|
|
||||||
- name: Install dependencies
|
|
||||||
run: |
|
|
||||||
pacman -S --noconfirm rustup gcc
|
|
||||||
rustup default stable
|
|
||||||
|
|
||||||
- name: Build with cargo
|
|
||||||
run: |
|
|
||||||
cargo build --release
|
|
||||||
|
|
||||||
- name: Upload artifact
|
|
||||||
uses: actions/upload-artifact@v3
|
|
||||||
with:
|
|
||||||
name: arch-setup
|
|
||||||
path: target/release/setup
|
|
||||||
|
|
||||||
build-on-debian:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
container:
|
|
||||||
image: debian:stable
|
|
||||||
steps:
|
|
||||||
|
|
||||||
- name: Install basic dependencies
|
|
||||||
run: |
|
|
||||||
apt update && apt upgrade -y
|
|
||||||
apt install -y git nodejs npm
|
|
||||||
|
|
||||||
- name: Checkout code
|
|
||||||
run: |
|
|
||||||
git clone https://akshun-gitlab.uk/aggarwalakshun/rust-setup.git .
|
|
||||||
git checkout $GITEA_SHA
|
|
||||||
|
|
||||||
- name: Install dependencies
|
|
||||||
run: |
|
|
||||||
apt install -y cargo
|
|
||||||
|
|
||||||
- name: Build with cargo
|
|
||||||
run: |
|
|
||||||
cargo build --release
|
|
||||||
|
|
||||||
- name: Upload artifact
|
|
||||||
uses: actions/upload-artifact@v3
|
|
||||||
with:
|
|
||||||
name: debian-setup
|
|
||||||
path: target/release/setup
|
|
||||||
|
|
||||||
build-on-fedora:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
container:
|
|
||||||
image: fedora:latest
|
|
||||||
steps:
|
|
||||||
|
|
||||||
- name: Install basic dependencies
|
|
||||||
run: |
|
|
||||||
dnf up -y
|
|
||||||
dnf install -y git nodejs npm
|
|
||||||
|
|
||||||
- name: Checkout code
|
|
||||||
run: |
|
|
||||||
git clone https://akshun-gitlab.uk/aggarwalakshun/rust-setup.git .
|
|
||||||
git checkout $GITEA_SHA
|
|
||||||
|
|
||||||
- name: Install dependencies
|
|
||||||
run: |
|
|
||||||
dnf install -y cargo
|
|
||||||
|
|
||||||
- name: Build with cargo
|
|
||||||
run: |
|
|
||||||
cargo build --release
|
|
||||||
|
|
||||||
- name: Upload artifact
|
|
||||||
uses: actions/upload-artifact@v3
|
|
||||||
with:
|
|
||||||
name: fedora-setup
|
|
||||||
path: target/release/setup
|
|
||||||
|
|
||||||
@@ -1,36 +0,0 @@
|
|||||||
stages:
|
|
||||||
- build
|
|
||||||
|
|
||||||
variables:
|
|
||||||
GIT_STRATEGY: clone
|
|
||||||
GIT_SUBMODULE_STRATEGY: recursive
|
|
||||||
|
|
||||||
.build_template: &build_template
|
|
||||||
stage: build
|
|
||||||
script:
|
|
||||||
- cargo build --release
|
|
||||||
artifacts:
|
|
||||||
paths:
|
|
||||||
- target/release/setup
|
|
||||||
|
|
||||||
build_on_arch:
|
|
||||||
<<: *build_template
|
|
||||||
image: archlinux:latest
|
|
||||||
before_script:
|
|
||||||
- pacman -Syu --noconfirm
|
|
||||||
- pacman -S --noconfirm git rustup gcc
|
|
||||||
- rustup default stable
|
|
||||||
|
|
||||||
build_on_debian:
|
|
||||||
<<: *build_template
|
|
||||||
image: debian:stable
|
|
||||||
before_script:
|
|
||||||
- apt update && apt upgrade -y
|
|
||||||
- apt install -y git cargo
|
|
||||||
|
|
||||||
build_on_fedora:
|
|
||||||
<<: *build_template
|
|
||||||
image: fedora:latest
|
|
||||||
before_script:
|
|
||||||
- dnf up -y
|
|
||||||
- dnf install -y git cargo
|
|
||||||
@@ -17,3 +17,8 @@ zen-browser-bin
|
|||||||
docker
|
docker
|
||||||
tailscale
|
tailscale
|
||||||
openvpn3
|
openvpn3
|
||||||
|
plasma6-wallpapers-wallpaper-engine-git
|
||||||
|
kvantum
|
||||||
|
flux-bin
|
||||||
|
helm
|
||||||
|
spotify-launcher
|
||||||
|
|||||||
@@ -10,3 +10,5 @@ korganizer
|
|||||||
plasma5-integration
|
plasma5-integration
|
||||||
kwayland-integration
|
kwayland-integration
|
||||||
kdepim-addons
|
kdepim-addons
|
||||||
|
steam
|
||||||
|
kubectl
|
||||||
|
|||||||
46
src/main.rs
46
src/main.rs
@@ -126,13 +126,13 @@ fn install_programs() -> Result<(), Box<dyn std::error::Error>> {
|
|||||||
|
|
||||||
for n in chosen.iter() {
|
for n in chosen.iter() {
|
||||||
if which("yay").is_some() {
|
if which("yay").is_some() {
|
||||||
Command::new("yay").arg("-S").arg(n).status()?;
|
Command::new("yay").arg("-S").arg("--noconfirm").arg(n).status()?;
|
||||||
} else if which("pacman").is_some() {
|
} else if which("pacman").is_some() {
|
||||||
Command::new("sudo").arg("pacman").arg("-S").arg(n).status()?;
|
Command::new("sudo").arg("pacman").arg("-S").arg("--noconfirm").arg(n).status()?;
|
||||||
} else if which("dnf").is_some() {
|
} else if which("dnf").is_some() {
|
||||||
Command::new("sudo").arg("dnf").arg("install").arg(n).status()?;
|
Command::new("sudo").arg("dnf").arg("install").arg("-y").arg(n).status()?;
|
||||||
} else if which("apt").is_some() {
|
} else if which("apt").is_some() {
|
||||||
Command::new("sudo").arg("apt").arg("install").arg(n).status()?;
|
Command::new("sudo").arg("apt").arg("install").arg("-y").arg(n).status()?;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -166,14 +166,14 @@ fn install_flatpaks() -> Result<(), Box<dyn std::error::Error>> {
|
|||||||
} else {
|
} else {
|
||||||
match distro {
|
match distro {
|
||||||
"arch" => {
|
"arch" => {
|
||||||
Command::new("sudo").arg("pacman").arg("-S").arg("flatpak").status()?;
|
Command::new("sudo").arg("pacman").arg("-S").arg("--noconfirm").arg("flatpak").status()?;
|
||||||
}
|
}
|
||||||
"Debian" => {
|
"Debian" => {
|
||||||
Command::new("sudo").arg("apt").arg("update").status()?;
|
Command::new("sudo").arg("apt").arg("update").status()?;
|
||||||
Command::new("sudo").arg("apt").arg("install").arg("flatpak").status()?;
|
Command::new("sudo").arg("apt").arg("install").arg("-y").arg("flatpak").status()?;
|
||||||
}
|
}
|
||||||
"fedora" => {
|
"fedora" => {
|
||||||
Command::new("sudo").arg("dnf").arg("install").arg("flatpak").status()?;
|
Command::new("sudo").arg("dnf").arg("install").arg("-y").arg("flatpak").status()?;
|
||||||
}
|
}
|
||||||
_ => eprint!("Unsupported distro")
|
_ => eprint!("Unsupported distro")
|
||||||
};
|
};
|
||||||
@@ -220,17 +220,17 @@ fn update_system() -> Result<(), Box<dyn std::error::Error>> {
|
|||||||
match distro {
|
match distro {
|
||||||
"arch" => {
|
"arch" => {
|
||||||
if which("yay").is_some() {
|
if which("yay").is_some() {
|
||||||
Command::new("yay").status()?;
|
Command::new("yay").arg("--noconfirm").status()?;
|
||||||
} else {
|
} else {
|
||||||
Command::new("sudo").arg("pacman").arg("-Syu").status()?;
|
Command::new("sudo").arg("pacman").arg("-Syu").arg("--noconfirm").status()?;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
"Debian" => {
|
"Debian" => {
|
||||||
Command::new("sudo").arg("apt").arg("update").status()?;
|
Command::new("sudo").arg("apt").arg("update").status()?;
|
||||||
Command::new("sudo").arg("apt").arg("upgrade").status()?;
|
Command::new("sudo").arg("apt").arg("upgrade").arg("-y").status()?;
|
||||||
}
|
}
|
||||||
"fedora" => {
|
"fedora" => {
|
||||||
Command::new("sudo").arg("dnf").arg("up").status()?;
|
Command::new("sudo").arg("dnf").arg("up").arg("-y").status()?;
|
||||||
}
|
}
|
||||||
_ => eprint!("Unsupported distro")
|
_ => eprint!("Unsupported distro")
|
||||||
};
|
};
|
||||||
@@ -255,7 +255,7 @@ fn aur() -> Result<(), Box<dyn std::error::Error>> {
|
|||||||
eprint!("yay not found. Install yay Y/N? (1/0)");
|
eprint!("yay not found. Install yay Y/N? (1/0)");
|
||||||
let input = handle_int_input();
|
let input = handle_int_input();
|
||||||
if input == 1 {
|
if input == 1 {
|
||||||
Command::new("sudo").arg("pacman").arg("-S").arg("git").arg("base-devel").status()?;
|
Command::new("sudo").arg("pacman").arg("-S").arg("--noconfirm").arg("git").arg("base-devel").status()?;
|
||||||
Command::new("git").arg("clone").arg("https://aur.archlinux.org/yay.git").status()?;
|
Command::new("git").arg("clone").arg("https://aur.archlinux.org/yay.git").status()?;
|
||||||
std::env::set_current_dir("yay")?;
|
std::env::set_current_dir("yay")?;
|
||||||
Command::new("makepkg").arg("-si").status()?;
|
Command::new("makepkg").arg("-si").status()?;
|
||||||
@@ -279,7 +279,7 @@ fn aur() -> Result<(), Box<dyn std::error::Error>> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
for i in chosen.iter() {
|
for i in chosen.iter() {
|
||||||
Command::new("yay").arg("-S").arg(i).status()?;
|
Command::new("yay").arg("-S").arg("--noconfirm").arg(i).status()?;
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
@@ -377,8 +377,8 @@ fn handle_intel_driver(distro: &str) -> Result<(), Box<dyn Error>> {
|
|||||||
return drivers();
|
return drivers();
|
||||||
}
|
}
|
||||||
match input_2 {
|
match input_2 {
|
||||||
1 => Command::new("sudo").arg("pacman").arg("-S").arg("intel-media-driver").status()?,
|
1 => Command::new("sudo").arg("pacman").arg("-S").arg("--noconfirm").arg("intel-media-driver").status()?,
|
||||||
2 => Command::new("sudo").arg("pacman").arg("-S").arg("libva-intel-driver").status()?,
|
2 => Command::new("sudo").arg("pacman").arg("-S").arg("--noconfirm").arg("libva-intel-driver").status()?,
|
||||||
_ => {
|
_ => {
|
||||||
eprintln!("Invalid choice");
|
eprintln!("Invalid choice");
|
||||||
return Ok(());
|
return Ok(());
|
||||||
@@ -387,10 +387,10 @@ fn handle_intel_driver(distro: &str) -> Result<(), Box<dyn Error>> {
|
|||||||
},
|
},
|
||||||
"Debian" => {
|
"Debian" => {
|
||||||
Command::new("sudo").arg("apt").arg("update").status()?;
|
Command::new("sudo").arg("apt").arg("update").status()?;
|
||||||
Command::new("sudo").arg("apt").arg("install").arg("intel-media-va-driver").status()
|
Command::new("sudo").arg("apt").arg("install").arg("-y").arg("intel-media-va-driver").status()
|
||||||
}?,
|
}?,
|
||||||
"fedora" => {
|
"fedora" => {
|
||||||
Command::new("sudo").arg("dnf").arg("install").arg("intel-media-driver").status()?
|
Command::new("sudo").arg("dnf").arg("install").arg("-y").arg("intel-media-driver").status()?
|
||||||
},
|
},
|
||||||
_ => {
|
_ => {
|
||||||
eprintln!("Invalid choice");
|
eprintln!("Invalid choice");
|
||||||
@@ -407,12 +407,12 @@ fn handle_amd_driver(distro: &str) -> Result<(), Box<dyn Error>> {
|
|||||||
clear_terminal();
|
clear_terminal();
|
||||||
|
|
||||||
match distro {
|
match distro {
|
||||||
"arch" => Command::new("sudo").arg("pacman").arg("-S").arg("mesa").status()?,
|
"arch" => Command::new("sudo").arg("pacman").arg("-S").arg("--noconfirm").arg("mesa").status()?,
|
||||||
"Debian" => {
|
"Debian" => {
|
||||||
Command::new("sudo").arg("apt").arg("update").status()?;
|
Command::new("sudo").arg("apt").arg("update").status()?;
|
||||||
Command::new("sudo").arg("apt").arg("install").arg("mesa-va-drivers").status()
|
Command::new("sudo").arg("apt").arg("install").arg("-y").arg("mesa-va-drivers").status()
|
||||||
}?,
|
}?,
|
||||||
"fedora" => Command::new("sudo").arg("dnf").arg("install").arg("mesa-va-drivers").status()?,
|
"fedora" => Command::new("sudo").arg("dnf").arg("install").arg("-y").arg("mesa-va-drivers").status()?,
|
||||||
_ => {
|
_ => {
|
||||||
eprintln!("Unsupported distro");
|
eprintln!("Unsupported distro");
|
||||||
return Ok(())
|
return Ok(())
|
||||||
@@ -428,12 +428,12 @@ fn handle_nvidia_driver(distro: &str) -> Result<(), Box<dyn Error>> {
|
|||||||
clear_terminal();
|
clear_terminal();
|
||||||
|
|
||||||
match distro {
|
match distro {
|
||||||
"arch" => Command::new("sudo").arg("pacman").arg("-S").arg("nvidia").status()?,
|
"arch" => Command::new("sudo").arg("pacman").arg("-S").arg("--noconfirm").arg("nvidia").status()?,
|
||||||
"Debian" => {
|
"Debian" => {
|
||||||
Command::new("sudo").arg("apt").arg("update").status()?;
|
Command::new("sudo").arg("apt").arg("update").status()?;
|
||||||
Command::new("sudo").arg("apt").arg("install").arg("nvidia-driver").status()
|
Command::new("sudo").arg("apt").arg("install").arg("-y").arg("nvidia-driver").status()
|
||||||
}?,
|
}?,
|
||||||
"fedora" => Command::new("sudo").arg("dnf").arg("install").arg("akmod-nvidia").status()?,
|
"fedora" => Command::new("sudo").arg("dnf").arg("install").arg("-y").arg("akmod-nvidia").status()?,
|
||||||
_ => {
|
_ => {
|
||||||
eprintln!("Unsupported distro");
|
eprintln!("Unsupported distro");
|
||||||
return Ok(())
|
return Ok(())
|
||||||
|
|||||||
Reference in New Issue
Block a user