[ALL] Update Package And Release Structure

This commit is contained in:
Ben C 2023-04-15 17:37:31 -04:00
parent dad2219a00
commit 39b7dcab82
14 changed files with 313 additions and 55 deletions

2
.cargo/config.toml Normal file
View File

@ -0,0 +1,2 @@
[alias]
xtask = "run --package xtask --"

30
.github/workflows/post_release_cli.yml vendored Normal file
View File

@ -0,0 +1,30 @@
name: Post Release
on:
push:
tags:
- "cli_v*"
jobs:
crates:
name: Publish To Crates.io
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Setup Rust Toolchain
uses: actions-rs/toolchain@v1
with:
toolchain: stable
- name: Setup Rust Cache
uses: Swatinem/rust-cache@v2
- name: Publish CLI
uses: actions-rs/cargo@v1
env:
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
with:
command: publish
args: -p owmods_cli

30
.github/workflows/post_release_core.yml vendored Normal file
View File

@ -0,0 +1,30 @@
name: Post Release
on:
push:
tags:
- "core_v*"
jobs:
crates:
name: Publish To Crates.io
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Setup Rust Toolchain
uses: actions-rs/toolchain@v1
with:
toolchain: stable
- name: Setup Rust Cache
uses: Swatinem/rust-cache@v2
- name: Publish Core
uses: actions-rs/cargo@v1
env:
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
with:
command: publish
args: -p owmods_core

57
.github/workflows/release_cli.yml vendored Normal file
View File

@ -0,0 +1,57 @@
name: Create CLI Release
on:
workflow_dispatch:
jobs:
release:
permissions:
contents: write
strategy:
fail-fast: false
matrix:
platform: [ubuntu-20.04, windows-latest]
runs-on: ${{ matrix.platform }}
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Setup Rust Toolchain
uses: actions-rs/toolchain@v1
with:
toolchain: stable
- name: Setup Rust Cache
uses: Swatinem/rust-cache@v2
- name: Get Package Version
id: pkg-version
run: echo "version=$(cargo metadata --no-deps --format-version=1 --no-default-features | jq '.packages[] | select(.name==\"owmods_cli\") | .version')" >> $GITHUB_OUTPUT
- name: Build CLI
run: cargo build -p owmods_cli --release
- name: Generate Dist Folder
if: ${{ matrix.platform == "ubuntu-20.04" }}
run: cargo xtask dist_cli
- name: Archive Dist Files
if: ${{ matrix.platform == "ubuntu-20.04" }}
run: tar --zstd -cfowmods.tar.zst -C target/release owmods -C ../../dist/cli/ man completions
- name: Upload CLI
uses: softprops/action-gh-release@v1
with:
tag_name: cli_v${{ steps.pkg-version.outputs.version }}
fail_on_unmatched_files: false
generate_release_notes: false
draft: true
files: |
owmods.tar.zst
target/release/owmods
target/release/owmods.exe

42
.github/workflows/release_core.yml vendored Normal file
View File

@ -0,0 +1,42 @@
name: Create Core Release
on:
workflow_dispatch:
jobs:
release:
permissions:
contents: write
runs-on: ubuntu-20.04
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Setup Rust Toolchain
uses: actions-rs/toolchain@v1
with:
toolchain: stable
- name: Setup Rust Cache
uses: Swatinem/rust-cache@v2
- name: Get Package Version
id: pkg-version
run: echo "version=$(cargo metadata --no-deps --format-version=1 --no-default-features | jq '.packages[] | select(.name==\"owmods_core\") | .version')" >> $GITHUB_OUTPUT
- name: Build Core
run: cargo package -p owmods_core
- name: Upload Core
uses: softprops/action-gh-release@v1
with:
tag_name: core_v${{ steps.pkg-version.outputs.version }}
fail_on_unmatched_files: false
generate_release_notes: false
draft: true
files: |
target/package/owmods_core-${{ steps.pkg-version.outputs.version }}.crate

View File

@ -1,12 +1,7 @@
name: Create Release name: Create GUI Release
on: on:
workflow_dispatch: workflow_dispatch:
inputs:
tag:
type: string
description: Version Tag
required: true
jobs: jobs:
release: release:
@ -36,6 +31,10 @@ jobs:
- name: Setup Rust Cache - name: Setup Rust Cache
uses: Swatinem/rust-cache@v2 uses: Swatinem/rust-cache@v2
- name: Get Package Version
id: pkg-version
run: echo "version=$(cargo metadata --no-deps --format-version=1 --no-default-features | jq '.packages[] | select(.name==\"owmods_gui\") | .version')" >> $GITHUB_OUTPUT
- name: Setup Node - name: Setup Node
uses: actions/setup-node@v3 uses: actions/setup-node@v3
with: with:
@ -72,23 +71,9 @@ jobs:
TAURI_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }} TAURI_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }}
TAURI_KEY_PASSWORD: ${{ secrets.TAURI_KEY_PASSWORD }} TAURI_KEY_PASSWORD: ${{ secrets.TAURI_KEY_PASSWORD }}
with: with:
tagName: ${{ inputs.tag }} tagName: gui_v${{ steps.pkg-version.outputs.version }}
includeUpdaterJson: true includeUpdaterJson: true
releaseName: 'Outer Wilds Mod Manager Version __VERSION__' releaseName: 'Outer Wilds Mod Manager Version __VERSION__'
releaseBody: 'See the assets to download and install this version.' releaseBody: 'See the assets to download and install this version.'
releaseDraft: true releaseDraft: true
prerelease: false prerelease: false
- name: Build CLI
run: cargo build -p owmods_cli --release
- name: Upload CLI
uses: softprops/action-gh-release@v1
with:
tag_name: ${{ inputs.tag }}
fail_on_unmatched_files: false
generate_release_notes: false
draft: true
files: |
target/release/owmods
target/release/owmods.exe

3
.gitignore vendored
View File

@ -1,6 +1,7 @@
# Build Output # Build Output
target target
owmods_cli/manpage dist/
owmods.tar.zst
# Logs # Logs
*.log *.log

11
Cargo.lock generated
View File

@ -4649,6 +4649,17 @@ dependencies = [
"libc", "libc",
] ]
[[package]]
name = "xtask"
version = "0.1.0"
dependencies = [
"anyhow",
"clap",
"clap_complete",
"clap_mangen",
"regex",
]
[[package]] [[package]]
name = "zip" name = "zip"
version = "0.6.4" version = "0.6.4"

View File

@ -2,7 +2,8 @@
members = [ members = [
"owmods_core", "owmods_core",
"owmods_cli", "owmods_cli",
"owmods_gui/backend" "owmods_gui/backend",
"xtask"
] ]
[profile.release] [profile.release]

View File

@ -1,32 +0,0 @@
use std::fs::create_dir_all;
use clap::CommandFactory;
use clap_mangen::Man;
include!("src/cli.rs");
fn main() -> std::io::Result<()> {
let out_dir = std::path::PathBuf::from(
std::env::var_os("CARGO_MANIFEST_DIR").ok_or(std::io::ErrorKind::NotFound)?,
)
.join("manpage");
create_dir_all(&out_dir)?;
let man = Man::new(BaseCli::command());
let mut buffer: Vec<u8> = Default::default();
man.render(&mut buffer)?;
std::fs::write(out_dir.join("owmods.1"), buffer)?;
let cmd = BaseCli::command();
for subcommand in cmd.get_subcommands() {
let subcommand = subcommand.clone();
let subcommand_name = format!("owmods-{}", subcommand.get_name());
let mut buffer: Vec<u8> = Default::default();
let man = Man::new(subcommand.clone());
man.render(&mut buffer)?;
std::fs::write(
std::path::PathBuf::from(&out_dir).join(format!("{}{}", &subcommand_name, ".1")),
buffer,
)?;
}
Ok(())
}

11
xtask/Cargo.toml Normal file
View File

@ -0,0 +1,11 @@
[package]
name = "xtask"
version = "0.1.0"
edition = "2021"
[dependencies]
anyhow = "1.0.70"
clap = { version = "4.2.2", features = ["derive", "string"] }
clap_complete = "4.2.0"
clap_mangen = "0.2.10"
regex = "1.7.3"

55
xtask/src/cli_tasks.rs Normal file
View File

@ -0,0 +1,55 @@
use std::fs::{create_dir_all, File};
use std::io::Write;
use anyhow::Result;
use clap::CommandFactory;
use clap_mangen::Man;
use crate::{get_out_dir, get_pkg_version};
include!("../../owmods_cli/src/cli.rs");
pub fn generate_man_files() -> Result<()> {
let out_dir = get_out_dir()?.join("cli").join("man");
create_dir_all(&out_dir)?;
let man = Man::new(BaseCli::command());
let mut buffer: Vec<u8> = Default::default();
man.render(&mut buffer)?;
std::fs::write(out_dir.join("owmods.1"), buffer)?;
let cmd = BaseCli::command();
for subcommand in cmd.get_subcommands() {
let subcommand = subcommand.clone();
let subcommand_name = format!("owmods-{}", subcommand.get_name());
let mut buffer: Vec<u8> = Default::default();
let man = Man::new(subcommand.clone().name(&subcommand_name));
man.render(&mut buffer)?;
std::fs::write(
std::path::PathBuf::from(&out_dir).join(format!("{}.1", &subcommand_name)),
buffer,
)?;
}
Ok(())
}
pub fn generate_completions() -> Result<()> {
let out_dir = get_out_dir()?.join("cli").join("completions");
create_dir_all(&out_dir)?;
let shells: Vec<Shell> = vec![Shell::Zsh, Shell::Bash, Shell::Fish];
for shell in shells {
let mut cmd = BaseCli::command();
let shell_name = format!("{:?}", shell).to_ascii_lowercase();
let mut file = File::create(out_dir.join(format!("owmods.{}", shell_name)))?;
clap_complete::generate(shell, &mut cmd, "owmods", &mut file);
}
Ok(())
}
pub fn generate_pkg_build() -> Result<()> {
let version = get_pkg_version(include_str!("../../owmods_cli/Cargo.toml"));
let pkgbuild = include_str!("cli_templates/PKGBUILD").replace("~~VERSION~~", version);
let out_dir = get_out_dir()?.join("cli").join("pkgbuild");
create_dir_all(&out_dir)?;
let mut file = File::create(out_dir.join("PKGBUILD"))?;
write!(file, "{}", pkgbuild)?;
Ok(())
}

View File

@ -0,0 +1,23 @@
# Maintainer: Bwc9876 <bwc9876@gmail.com>
pkgname=owmods-cli-bin
pkgver=~~VERSION~~
pkgrel=1
pkgdesc="The CLI version of the Outer Wilds Mod Manager"
arch=("x86_64")
url="https://github.com/Bwc9876/ow-mod-man/owmods_cli"
license=('GPL')
makedepends=(cargo)
source=("$pkgname-$pkgver.tar.gz::https://github.com/Bwc9876/paru/releases/download/cli_v$pkgver/owmods.tar.zst")
package() {
cd "$srcdir/"
install -Dm755 owmods "${pkgdir}/usr/bin/owmods"
install -Dm644 "completions/owmods.bash" "${pkgdir}/usr/share/bash-completion/completions/owmods.bash"
install -Dm644 "completions/owmods.fish" "${pkgdir}/usr/share/fish/vendor_completions.d/owmods.fish"
install -Dm644 "completions/owmods.zsh" "${pkgdir}/usr/share/zsh/site-functions/_owmods"
for file in man/*; do
install -Dm644 "$file" "$pkgdir/usr/share/man/man1/$(basename $file)"
done
}

42
xtask/src/main.rs Normal file
View File

@ -0,0 +1,42 @@
use std::path::PathBuf;
use anyhow::Result;
use cli_tasks::{generate_completions, generate_man_files, generate_pkg_build};
use regex::RegexBuilder;
mod cli_tasks;
pub fn get_out_dir() -> Result<PathBuf> {
let out_dir = std::path::PathBuf::from(std::env::var_os("CARGO_MANIFEST_DIR").unwrap())
.parent()
.unwrap()
.join("dist");
Ok(out_dir)
}
pub fn get_pkg_version(in_str: &str) -> &str {
let re = RegexBuilder::new(r#"^version = "(.*?)"$"#)
.multi_line(true)
.build()
.unwrap();
let group = re.captures_iter(in_str).next().unwrap();
let version_match = group.get(1).unwrap();
version_match.as_str()
}
fn main() -> Result<()> {
let cmd = std::env::args().nth(1).expect("Missing Command Name");
match cmd.as_str() {
"gen_man" => generate_man_files()?,
"gen_completions" => generate_completions()?,
"dist_cli" => {
println!("Generating Completions...");
generate_completions()?;
println!("Generating Man Pages...");
generate_man_files()?;
}
"cli_pkg_build" => generate_pkg_build()?,
_ => panic!("Invalid Command: {cmd}"),
}
Ok(())
}