chore: maintenance (#233)

This commit is contained in:
Cain 2024-11-27 15:21:11 +00:00 committed by GitHub
commit c04f442bbe
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
16 changed files with 187 additions and 196 deletions

View file

@ -1,6 +1,6 @@
{ {
"act": true, "act": true,
"repository": { "repository": {
"default_branch": "main" "default_branch": "main"
} }
} }

View file

@ -3,8 +3,8 @@ name: Security audit
on: on:
push: push:
paths: paths:
- '**/Cargo.toml' - "**/Cargo.toml"
- '**/Cargo.lock' - "**/Cargo.lock"
jobs: jobs:
security_audit: security_audit:
runs-on: ubuntu-latest runs-on: ubuntu-latest
@ -15,6 +15,6 @@ jobs:
run: cargo generate-lockfile run: cargo generate-lockfile
- name: Audit Check - name: Audit Check
- uses: rustsec/audit-check@v2.0.0 uses: rustsec/audit-check@v2.0.0
with: with:
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}

View file

@ -3,14 +3,14 @@ name: CI
on: on:
push: push:
branches: [ "main" ] branches: ["main"]
paths: paths:
- "**.rs" # Any rust file - "**.rs" # Any rust file
- "**/Cargo.toml" # Any Cargo.toml - "**/Cargo.toml" # Any Cargo.toml
- ".rustfmt.toml" - ".rustfmt.toml"
- ".github/workflows/ci.yml" # This action - ".github/workflows/ci.yml" # This action
pull_request: pull_request:
branches: [ "main" ] branches: ["main"]
paths: paths:
- "**.rs" # Any rust file - "**.rs" # Any rust file
- "**/Cargo.toml" # Any Cargo.toml - "**/Cargo.toml" # Any Cargo.toml
@ -51,7 +51,7 @@ jobs:
# If we were able to build then test different feature combinations compile with the library # If we were able to build then test different feature combinations compile with the library
build_lib: build_lib:
runs-on: ubuntu-latest runs-on: ubuntu-latest
needs: [ "build_first" ] needs: ["build_first"]
# Only run if library files were modified # Only run if library files were modified
if: ${{ needs.build_first.outputs.lib == 'true' }} if: ${{ needs.build_first.outputs.lib == 'true' }}
strategy: strategy:
@ -69,7 +69,7 @@ jobs:
- build_type: "--no-default-features --features game_defs" - build_type: "--no-default-features --features game_defs"
build_name: "Just Game definitions" build_name: "Just Game definitions"
- build_type: "--no-default-features --features serde" - build_type: "--no-default-features --features serde"
build_name: "Just serde" build_name: "Just serde"
name: "Build library ${{ matrix.build_name }}" name: "Build library ${{ matrix.build_name }}"
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
@ -84,7 +84,7 @@ jobs:
# If we were able to build then test different feature combinations compile with the CLI # If we were able to build then test different feature combinations compile with the CLI
build_cli: build_cli:
runs-on: ubuntu-latest runs-on: ubuntu-latest
needs: [ "build_first" ] needs: ["build_first"]
# Only run if CLI files were modified # Only run if CLI files were modified
if: ${{ needs.build_first.outputs.cli == 'true' }} if: ${{ needs.build_first.outputs.cli == 'true' }}
strategy: strategy:
@ -104,13 +104,13 @@ jobs:
cache-targets: false cache-targets: false
save-if: false save-if: false
- name: Run Build - name: Run Build
run: cargo check -p gamedig-cli --verbose --bins --examples --tests ${{ matrix.build_type }} run: cargo check -p gamedig_cli --verbose --bins --examples --tests ${{ matrix.build_type }}
# If we were able to build then test the MSRV compiles (for the libary as not enforced for CLI) # If we were able to build then test the MSRV compiles (for the libary as not enforced for CLI)
build_msrv: build_msrv:
name: "Build using MSRV (lib only)" name: "Build using MSRV (lib only)"
runs-on: ubuntu-latest runs-on: ubuntu-latest
needs: [ "build_first" ] needs: ["build_first"]
# Only run if library files were modified # Only run if library files were modified
if: ${{ needs.build_first.outputs.lib == 'true' }} if: ${{ needs.build_first.outputs.lib == 'true' }}
# Unfortunate hard-coding of rustup directory so that rust-cache caches it # Unfortunate hard-coding of rustup directory so that rust-cache caches it
@ -128,7 +128,7 @@ jobs:
- name: Install MSRV - name: Install MSRV
uses: actions-rs/toolchain@v1 uses: actions-rs/toolchain@v1
with: with:
toolchain: 1.65.0 toolchain: 1.71.1
override: true override: true
- name: Run MSRV - name: Run MSRV
run: cargo check -p gamedig run: cargo check -p gamedig
@ -161,7 +161,7 @@ jobs:
clippy: clippy:
name: "Run clippy tests" name: "Run clippy tests"
runs-on: ubuntu-latest runs-on: ubuntu-latest
needs: [ "build_first" ] needs: ["build_first"]
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
- uses: Swatinem/rust-cache@v2 - uses: Swatinem/rust-cache@v2
@ -185,7 +185,7 @@ jobs:
doc: doc:
name: "Check rustdoc" name: "Check rustdoc"
runs-on: ubuntu-latest runs-on: ubuntu-latest
needs: [ "build_first" ] needs: ["build_first"]
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
- uses: Swatinem/rust-cache@v2 - uses: Swatinem/rust-cache@v2

View file

@ -1,6 +1,6 @@
name: "Pull Request Labeler" name: "Pull Request Labeler"
on: on:
- pull_request_target - pull_request_target
jobs: jobs:
triage: triage:

View file

@ -10,7 +10,7 @@ on:
branches: branches:
- "main" # Limit badge commits to only happen on the main branch - "main" # Limit badge commits to only happen on the main branch
schedule: # This runs on the default branch only, it could still trigger on PRs but only if they develop on default branch and enable actions. schedule: # This runs on the default branch only, it could still trigger on PRs but only if they develop on default branch and enable actions.
- cron: '34 3 * * 2' # Update once a week in case node-gamedig has changed - cron: "34 3 * * 2" # Update once a week in case node-gamedig has changed
workflow_dispatch: workflow_dispatch:
jobs: jobs:

View file

@ -1,35 +0,0 @@
name: Release
on:
release:
types: [created]
workflow_dispatch:
jobs:
release:
if: startsWith(github.event.release.tag_name, 'cli-')
name: Release ${{ matrix.target }}
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
include:
- target: x86_64-pc-windows-gnu
archive: zip
- target: x86_64-unknown-linux-musl
archive: tar.gz tar.xz tar.zst
- target: x86_64-apple-darwin
archive: zip
- target: wasm32-wasi
archive: zip tar.gz
steps:
- uses: actions/checkout@v4
- name: Compile and release
uses: rust-build/rust-build.action@v1.4.5
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
RUSTTARGET: ${{ matrix.target }}
ARCHIVE_TYPES: ${{ matrix.archive }}
SRC_DIR: ./crates/cli

View file

@ -9,10 +9,10 @@ import { closeSync, openSync, writeSync } from "node:fs";
import { spawnSync } from "node:child_process"; import { spawnSync } from "node:child_process";
const setOutput = (key, value) => { const setOutput = (key, value) => {
const file = openSync(process.env.GITHUB_OUTPUT, "a"); const file = openSync(process.env.GITHUB_OUTPUT, "a");
writeSync(file, `${key}=${value}\n`); writeSync(file, `${key}=${value}\n`);
closeSync(file); closeSync(file);
} };
// Get node IDs // Get node IDs
// NOTE: Here we directly import from games to avoid loading // NOTE: Here we directly import from games to avoid loading
@ -25,28 +25,39 @@ const node_total = node_ids.size;
// Get rust IDs // Get rust IDs
const command = spawnSync("cargo", ["run", "-p", "gamedig", "--example", "generic"]); const command = spawnSync("cargo", [
"run",
"-p",
"gamedig",
"--example",
"generic",
]);
if (command.status !== 0) { if (command.status !== 0) {
console.error(command.stderr.toString("utf8")); console.error(command.stderr.toString("utf8"));
process.exit(1); process.exit(1);
} }
const rust_ids_pretty = command.stdout.toString("utf8"); const rust_ids_pretty = command.stdout.toString("utf8");
const rust_ids = new Set(rust_ids_pretty.split("\n").map(line => line.split("\t")[0]).filter(id => id.length > 0)); const rust_ids = new Set(
rust_ids_pretty
.split("\n")
.map((line) => line.split("\t")[0])
.filter((id) => id.length > 0)
);
// Detect missing node IDs // Detect missing node IDs
for (const id of rust_ids) { for (const id of rust_ids) {
if (node_ids.delete(id)) { if (node_ids.delete(id)) {
rust_ids.delete(id); rust_ids.delete(id);
} }
} }
console.log("Node remains", node_ids); console.log("Node remains", node_ids);
console.log("Rust remains", rust_ids); console.log("Rust remains", rust_ids);
const percent = 1 - (node_ids.size / node_total); const percent = 1 - node_ids.size / node_total;
// Output percent to 2 decimal places // Output percent to 2 decimal places
setOutput("percent", Math.round(percent*10000)/100); setOutput("percent", Math.round(percent * 10000) / 100);

View file

@ -43,7 +43,7 @@ repos:
language: system language: system
files: '([.]rs|Cargo\.toml)$' files: '([.]rs|Cargo\.toml)$'
pass_filenames: false pass_filenames: false
entry: rustup run --install 1.65 cargo check -p gamedig entry: rustup run --install 1.71.1 cargo check -p gamedig
- id: docs - id: docs
name: Check rustdoc compiles name: Check rustdoc compiles

236
README.md
View file

@ -1,118 +1,118 @@
<h1 align="center">rust-GameDig</h1> <h1 align="center">rust-GameDig</h1>
<h5 align="center">The fast library for querying game servers/services.</h5> <h5 align="center">The fast library for querying game servers/services.</h5>
<div align="center"> <div align="center">
<a href="https://github.com/gamedig/rust-gamedig/actions"> <a href="https://github.com/gamedig/rust-gamedig/actions">
<img src="https://github.com/gamedig/rust-gamedig/actions/workflows/ci.yml/badge.svg" alt="CI"> <img src="https://github.com/gamedig/rust-gamedig/actions/workflows/ci.yml/badge.svg" alt="CI">
</a> </a>
<a href="https://crates.io/crates/gamedig"> <a href="https://crates.io/crates/gamedig">
<img src="https://img.shields.io/crates/v/gamedig.svg?color=orange" alt="Latest Version"> <img src="https://img.shields.io/crates/v/gamedig.svg?color=orange" alt="Latest Version">
</a> </a>
<a href="https://crates.io/crates/gamedig"> <a href="https://crates.io/crates/gamedig">
<img src="https://img.shields.io/crates/d/gamedig?color=purple" alt="Crates.io"> <img src="https://img.shields.io/crates/d/gamedig?color=purple" alt="Crates.io">
</a> </a>
<a href="https://github.com/gamedig/node-gamedig"> <a href="https://github.com/gamedig/node-gamedig">
<img src="https://raw.githubusercontent.com/gamedig/rust-gamedig/main/.github/badges/node.svg" alt="Node-GameDig Game Coverage"> <img src="https://raw.githubusercontent.com/gamedig/rust-gamedig/main/.github/badges/node.svg" alt="Node-GameDig Game Coverage">
</a> </a>
<a href="https://deps.rs/crate/gamedig/0.5.1"> <a href="https://deps.rs/crate/gamedig">
<img src="https://deps.rs/crate/gamedig/0.5.1/status.svg" alt="Rust-GameDig Dependencies"> <img src="https://deps.rs/crate/gamedig/latest/status.svg" alt="Rust-GameDig Dependencies">
</a> </a>
</div> </div>
<h5 align="center"> <h5 align="center">
This library brings what This library brings what
<a href="https://github.com/gamedig/node-gamedig"> <a href="https://github.com/gamedig/node-gamedig">
node-GameDig node-GameDig
</a> </a>
does (and not only), to pure Rust! does (and not only), to pure Rust!
</h5> </h5>
**Warning**: This project goes through frequent API breaking changes and hasn't been thoroughly tested. **Warning**: This project goes through frequent API breaking changes and hasn't been thoroughly tested.
## Community ## Community
Checkout the GameDig Community Discord Server [here](https://discord.gg/NVCMn3tnxH). Checkout the GameDig Community Discord Server [here](https://discord.gg/NVCMn3tnxH).
Note that it isn't be a replacement for GitHub issues, if you have found a problem Note that it isn't be a replacement for GitHub issues, if you have found a problem
within the library or want to request a feature, it's better to do so here rather than within the library or want to request a feature, it's better to do so here rather than
on Discord. on Discord.
## Usage ## Usage
Minimum Supported Rust Version is `1.65.0` and the code is cross-platform. Minimum Supported Rust Version is `1.71.1"` and the code is cross-platform.
Pick a game/service/protocol (check the [GAMES](GAMES.md), [SERVICES](SERVICES.md) and [PROTOCOLS](PROTOCOLS.md) files Pick a game/service/protocol (check the [GAMES](GAMES.md), [SERVICES](SERVICES.md) and [PROTOCOLS](PROTOCOLS.md) files
to see the currently supported ones), provide the ip and the port (be aware that some game servers use a separate port to see the currently supported ones), provide the ip and the port (be aware that some game servers use a separate port
for the info queries, the port can also be optional if the server is running the default ports) then query on it. for the info queries, the port can also be optional if the server is running the default ports) then query on it.
[Team Fortress 2](https://store.steampowered.com/app/440/Team_Fortress_2/) query example: [Team Fortress 2](https://store.steampowered.com/app/440/Team_Fortress_2/) query example:
```rust ```rust
use gamedig::games::teamfortress2; use gamedig::games::teamfortress2;
fn main() { fn main() {
let response = teamfortress2::query(&"127.0.0.1".parse().unwrap(), None); let response = teamfortress2::query(&"127.0.0.1".parse().unwrap(), None);
// None is the default port (which is 27015), could also be Some(27015) // None is the default port (which is 27015), could also be Some(27015)
match response { // Result type, must check what it is... match response { // Result type, must check what it is...
Err(error) => println!("Couldn't query, error: {}", error), Err(error) => println!("Couldn't query, error: {}", error),
Ok(r) => println!("{:#?}", r) Ok(r) => println!("{:#?}", r)
} }
} }
``` ```
Response (note that some games have a different structure): Response (note that some games have a different structure):
```json5 ```json5
{ {
protocol: 17, protocol: 17,
name: "Team Fortress 2 Dedicated Server.", name: "Team Fortress 2 Dedicated Server.",
map: "ctf_turbine", map: "ctf_turbine",
game: "tf2", game: "tf2",
appid: 440, appid: 440,
players_online: 0, players_online: 0,
players_details: [], players_details: [],
players_maximum: 69, players_maximum: 69,
players_bots: 0, players_bots: 0,
server_type: Dedicated, server_type: Dedicated,
has_password: false, has_password: false,
vac_secured: true, vac_secured: true,
version: "7638371", version: "7638371",
port: Some(27015), port: Some(27015),
steam_id: Some(69753253289735296), steam_id: Some(69753253289735296),
tv_port: None, tv_port: None,
tv_name: None, tv_name: None,
keywords: Some( keywords: Some(
"alltalk,nocrits" "alltalk,nocrits"
), ),
rules: [ rules: [
"mp_autoteambalance" "mp_autoteambalance"
: :
"1", "1",
"mp_maxrounds" "mp_maxrounds"
: :
"5", "5",
//.... //....
] ]
} }
``` ```
Want to see more examples? Checkout the [examples](crates/lib/examples) folder. Want to see more examples? Checkout the [examples](crates/lib/examples) folder.
## Command Line Interface ## Command Line Interface
The library also has an [official CLI](https://crates.io/crates/gamedig_cli) that you can use but it has The library also has an [official CLI](https://crates.io/crates/gamedig_cli) that you can use but it has
MSRV of `1.74.1`. MSRV of `1.74.1`.
## Documentation ## Documentation
The documentation is available at [docs.rs](https://docs.rs/gamedig/latest/gamedig/). The documentation is available at [docs.rs](https://docs.rs/gamedig/latest/gamedig/).
Curious about the history and what changed between versions? Curious about the history and what changed between versions?
Everything is in the changelogs file: [lib](crates/lib/CHANGELOG.md) and [cli](crates/lib/CHANGELOG.md). Everything is in the changelogs file: [lib](crates/lib/CHANGELOG.md) and [cli](crates/lib/CHANGELOG.md).
## Contributing ## Contributing
If you want to see your favorite game/service being supported here, open an issue, and I'll prioritize it (or do a pull If you want to see your favorite game/service being supported here, open an issue, and I'll prioritize it (or do a pull
request if you want to implement it yourself)! request if you want to implement it yourself)!
Before contributing please read [CONTRIBUTING](CONTRIBUTING.md). Before contributing please read [CONTRIBUTING](CONTRIBUTING.md).

View file

@ -1,6 +1,6 @@
# MSRV (Minimum Supported Rust Version) # MSRV (Minimum Supported Rust Version)
Current: `1.65.0` Current: `1.71.1`
Places to update: Places to update:

View file

@ -1,9 +1,17 @@
Who knows what the future holds... Who knows what the future holds...
# 0.X.Y - DD/MM/YYYY # X.Y.Z - DD/MM/YYYY
Nothing... yet. Nothing... yet.
# 0.2.0 - 26/11/2024
### Breaking Changes:
- Restructured the release flow to be more consistent (GitHub releases will no longer be available, use cargo instead).
- Changed crate name from `gamedig-cli` to `gamedig_cli` to align with recommended naming conventions.
- The CLI now requires a minimum Rust version of `1.74.1`.
# 0.1.1 - 15/07/2024 # 0.1.1 - 15/07/2024
### Changes: ### Changes:

View file

@ -5,7 +5,7 @@ authors = [
] ]
description = "A command line interface for gamedig" description = "A command line interface for gamedig"
license = "MIT" license = "MIT"
version = "0.1.1" version = "0.2.0"
edition = "2021" edition = "2021"
default-run = "gamedig_cli" default-run = "gamedig_cli"
homepage = "https://gamedig.github.io/" homepage = "https://gamedig.github.io/"
@ -33,7 +33,7 @@ browser = ["dep:webbrowser"]
# Core Dependencies # Core Dependencies
thiserror = "2.0.0" thiserror = "2.0.0"
clap = { version = "4.5.4", default-features = false, features = ["derive"] } clap = { version = "4.5.4", default-features = false, features = ["derive"] }
gamedig = { version = "0.5", default-features = false, features = [ gamedig = { version = "0.6", default-features = false, features = [
"clap", "clap",
"games", "games",
"game_defs", "game_defs",

View file

@ -1,6 +1,6 @@
# rust-GameDig CLI # Rust GameDig CLI
The official [rust-GameDig](https://crates.io/crates/gamedig_cli) Command Line Interface. The official [rust-GameDig](https://crates.io/crates/gamedig) Command Line Interface.
[![CI](https://github.com/gamedig/rust-gamedig/actions/workflows/ci.yml/badge.svg)](https://github.com/gamedig/rust-gamedig/actions) [![License:MIT](https://img.shields.io/github/license/gamedig/rust-gamedig?color=blue)](https://github.com/gamedig/rust-gamedig/blob/main/LICENSE.md) [![node coverage](https://raw.githubusercontent.com/gamedig/rust-gamedig/main/.github/badges/node.svg)](https://github.com/gamedig/node-gamedig) [![CI](https://github.com/gamedig/rust-gamedig/actions/workflows/ci.yml/badge.svg)](https://github.com/gamedig/rust-gamedig/actions) [![License:MIT](https://img.shields.io/github/license/gamedig/rust-gamedig?color=blue)](https://github.com/gamedig/rust-gamedig/blob/main/LICENSE.md) [![node coverage](https://raw.githubusercontent.com/gamedig/rust-gamedig/main/.github/badges/node.svg)](https://github.com/gamedig/node-gamedig)

View file

@ -1,11 +1,18 @@
Who knows what the future holds... Who knows what the future holds...
# 0.X.Y - DD/MM/YYYY # X.Y.Z - DD/MM/YYYY
# 0.6.0 - 26/11/2024
Breaking:
- MSRV is now `1.71.1` (was `1.65.0`), this is due to deps we rely on requiring a higher version on linux builds (`1.65.0` is 2+ years old).
Games: Games:
- [Minetest](https://www.minetest.net/) support (available on the `tls`, `serde` and `services` features) (#218 by - [Minetest](https://www.minetest.net/) support (available on the `tls`, `serde` and `services` features) (#218 by
@CosminPerRam). @CosminPerRam).
- Fixed the forest game failing when host has the client steam id (#232 by @paul-hansen).
# 0.5.2 - 20/10/2024 # 0.5.2 - 20/10/2024

View file

@ -1,6 +1,6 @@
[package] [package]
name = "gamedig" name = "gamedig"
version = "0.5.2" version = "0.6.0"
edition = "2021" edition = "2021"
authors = [ authors = [
"rust-GameDig contributors [https://github.com/gamedig/rust-gamedig/contributors]", "rust-GameDig contributors [https://github.com/gamedig/rust-gamedig/contributors]",
@ -13,7 +13,7 @@ documentation = "https://docs.rs/gamedig/latest/gamedig/"
repository = "https://github.com/gamedig/rust-gamedig" repository = "https://github.com/gamedig/rust-gamedig"
readme = "README.md" readme = "README.md"
keywords = ["server", "query", "game", "check", "status"] keywords = ["server", "query", "game", "check", "status"]
rust-version = "1.65.0" rust-version = "1.71.1"
categories = ["parser-implementations", "parsing", "network-programming", "encoding"] categories = ["parser-implementations", "parsing", "network-programming", "encoding"]
[features] [features]

View file

@ -36,7 +36,7 @@ on Discord.
## Usage ## Usage
Minimum Supported Rust Version is `1.65.0` and the code is cross-platform. Minimum Supported Rust Version is `1.71.1` and the code is cross-platform.
Pick a game/service/protocol (check Pick a game/service/protocol (check
the [GAMES](https://github.com/gamedig/rust-gamedig/blob/main/GAMES.md), [SERVICES](https://github.com/gamedig/rust-gamedig/blob/main/SERVICES.md) the [GAMES](https://github.com/gamedig/rust-gamedig/blob/main/GAMES.md), [SERVICES](https://github.com/gamedig/rust-gamedig/blob/main/SERVICES.md)