Compare commits
23 Commits
e35d944d8e
...
v1
| Author | SHA1 | Date | |
|---|---|---|---|
| ed3cc44eaf | |||
| e4529610ea | |||
| 753b346c1e | |||
| bd3054eecf | |||
| 7ac18b07e4 | |||
| c858c1f601 | |||
| a16d691fc0 | |||
| d2daea094f | |||
| eb62a4bbcb | |||
| 6523c8408e | |||
| 782aa4c680 | |||
| 24164c8042 | |||
| 7554f59037 | |||
| 46e2859d28 | |||
| 93a9424b98 | |||
| d4649c8f00 | |||
| 59ef68a9b4 | |||
| c6096a1d51 | |||
| 30b90ec02b | |||
| 137be4f34c | |||
| 8dc0e308ff | |||
| 8269d99d26 | |||
| bd281b11b6 |
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 http://192.168.1.233:222/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 http://192.168.1.233:222/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 http://192.168.1.233:222/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
|
||||
|
||||
@@ -6,13 +6,10 @@ guake-git
|
||||
howdy-beta-git
|
||||
lens-bin
|
||||
moonlight-qt-bin
|
||||
oh-my-posh-bin
|
||||
onlyoffice-bin
|
||||
jellyfin-media-player
|
||||
mission-center
|
||||
moonlight-qt-bin
|
||||
oh-my-posh-bin
|
||||
onlyoffice-bin
|
||||
sunshine-bin
|
||||
standardnotes-bin
|
||||
visual-studio-code-bin
|
||||
|
||||
@@ -19,6 +19,8 @@
|
||||
"org.qbittorrent.qBittorrent": "qBittorrent",
|
||||
"org.videolan.VLC": "VLC",
|
||||
"org.standardnotes.standardnotes": "Standard Notes",
|
||||
"one.ablaze.floorp": "Floorp"
|
||||
"one.ablaze.floorp": "Floorp",
|
||||
"app.zen_browser.zen": "Zen Browser",
|
||||
"io.kinvolk.Headlamp": "Headlamp"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
guake
|
||||
yakuake
|
||||
neovim
|
||||
git
|
||||
flatpak
|
||||
@@ -8,4 +8,5 @@ cargo
|
||||
kio-gdrive
|
||||
korganizer
|
||||
plasma5-integration
|
||||
kwayland-integration
|
||||
kwayland-integration
|
||||
kdepim-addons
|
||||
|
||||
20
src/main.rs
20
src/main.rs
@@ -29,7 +29,7 @@ fn main() -> io::Result<()> {
|
||||
let buffer = std::str::from_utf8(&file_content.data)
|
||||
.map_err(|e| io::Error::new(io::ErrorKind::InvalidData, e))?;
|
||||
|
||||
let first_choice: Vec<String> = buffer.lines().map(|line| line.to_string()).collect();
|
||||
let first_choice: Vec<String> = buffer.lines().map(|line| line.trim().to_string()).collect();
|
||||
|
||||
for (index, element) in first_choice.iter().enumerate() {
|
||||
eprint!("{}. {}\n", index + 1, element);
|
||||
@@ -43,9 +43,9 @@ fn main() -> io::Result<()> {
|
||||
}
|
||||
|
||||
match distro {
|
||||
"arch" => arch_choices(input)?, // Pass the input value here
|
||||
"Debian" => debian_choices(input)?, // Pass the input value here
|
||||
"fedora" => fedora_choices(input)?, // Pass the input value here
|
||||
"arch" => arch_choices(input)?,
|
||||
"Debian" => debian_choices(input)?,
|
||||
"fedora" => fedora_choices(input)?,
|
||||
_ => return Err(io::Error::new(io::ErrorKind::NotFound, "Unsupported distro")),
|
||||
};
|
||||
}
|
||||
@@ -103,7 +103,7 @@ fn install_programs() -> Result<(), Box<dyn std::error::Error>> {
|
||||
let file = Asset::get("prompts/programs.txt").ok_or_else(|| io::Error::new(io::ErrorKind::NotFound, "File not found"))?;
|
||||
let buffer = std::str::from_utf8(&file.data)
|
||||
.map_err(|e| io::Error::new(io::ErrorKind::InvalidData, e))?;
|
||||
let choice: Vec<String> = buffer.lines().map(|line| line.to_string()).collect();
|
||||
let choice: Vec<String> = buffer.lines().map(|line| line.trim().to_string()).collect();
|
||||
|
||||
for(index, element) in choice.iter().enumerate() {
|
||||
eprint!("{}. {}\n", index+1, element)
|
||||
@@ -235,6 +235,10 @@ fn update_system() -> Result<(), Box<dyn std::error::Error>> {
|
||||
_ => eprint!("Unsupported distro")
|
||||
};
|
||||
|
||||
if which("flatpak").is_some() {
|
||||
Command::new("flatpak").arg("update").status()?;
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
@@ -245,10 +249,10 @@ fn aur() -> Result<(), Box<dyn std::error::Error>> {
|
||||
let file = Asset::get("prompts/aur.txt").ok_or_else(|| io::Error::new(io::ErrorKind::NotFound, "File not found"))?;
|
||||
let buffer = std::str::from_utf8(&file.data)
|
||||
.map_err(|e| io::Error::new(io::ErrorKind::InvalidData, e))?;
|
||||
let choice: Vec<String> = buffer.lines().map(|line| line.to_string()).collect();
|
||||
let choice: Vec<String> = buffer.lines().map(|line| line.trim().to_string()).collect();
|
||||
|
||||
if which("yay").is_none() {
|
||||
eprint!("AUR helper not found. Install yay Y/N? (1/0)");
|
||||
eprint!("yay not found. Install yay Y/N? (1/0)");
|
||||
let input = handle_int_input();
|
||||
if input == 1 {
|
||||
Command::new("sudo").arg("pacman").arg("-S").arg("git").arg("base-devel").status()?;
|
||||
@@ -291,7 +295,7 @@ fn third_party() -> Result<(), Box<dyn std::error::Error>> {
|
||||
let buffer = std::str::from_utf8(&file.data)
|
||||
.map_err(|e| io::Error::new(io::ErrorKind::InvalidData, e))?;
|
||||
|
||||
let choices: Vec<String> = buffer.lines().map(|line| line.to_string()).collect();
|
||||
let choices: Vec<String> = buffer.lines().map(|line| line.trim().to_string()).collect();
|
||||
|
||||
for (index, element) in choices.iter().enumerate() {
|
||||
eprintln!("{}. {}", index + 1, element);
|
||||
|
||||
Reference in New Issue
Block a user