celq 0.1.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- celq-0.1.1/.github/scripts/publish-npm-binary.sh +64 -0
- celq-0.1.1/.github/scripts/stable_or_not.cel +3 -0
- celq-0.1.1/.github/workflows/main.yml +108 -0
- celq-0.1.1/.github/workflows/release_crates_io.yml +28 -0
- celq-0.1.1/.github/workflows/release_github.yml +100 -0
- celq-0.1.1/.github/workflows/release_npm.yml +116 -0
- celq-0.1.1/.github/workflows/release_pypi.yml +87 -0
- celq-0.1.1/.gitignore +27 -0
- celq-0.1.1/CONTRIBUTING.md +55 -0
- celq-0.1.1/Cargo.lock +942 -0
- celq-0.1.1/Cargo.toml +50 -0
- celq-0.1.1/LICENSE-APACHE +202 -0
- celq-0.1.1/LICENSE-MIT +21 -0
- celq-0.1.1/PKG-INFO +163 -0
- celq-0.1.1/README.md +137 -0
- celq-0.1.1/docs/manual.md +365 -0
- celq-0.1.1/npm/celq/.gitignore +133 -0
- celq-0.1.1/npm/celq/.yarnrc.yml +1 -0
- celq-0.1.1/npm/celq/LICENSE-APACHE +202 -0
- celq-0.1.1/npm/celq/LICENSE-MIT +21 -0
- celq-0.1.1/npm/celq/README.md +137 -0
- celq-0.1.1/npm/celq/package.json +50 -0
- celq-0.1.1/npm/celq/src/index.ts +40 -0
- celq-0.1.1/npm/celq/tsconfig.json +12 -0
- celq-0.1.1/npm/celq/yarn.lock +1039 -0
- celq-0.1.1/npm/package.json.cel +25 -0
- celq-0.1.1/pypi/.gitignore +7 -0
- celq-0.1.1/pypi/LICENSE-APACHE +202 -0
- celq-0.1.1/pypi/LICENSE-MIT +21 -0
- celq-0.1.1/pypi/README.md +137 -0
- celq-0.1.1/pypi/pyproject.toml +51 -0
- celq-0.1.1/pypi/uv.lock +43 -0
- celq-0.1.1/pyproject.toml +51 -0
- celq-0.1.1/src/args2cel/args2cel_test.rs +79 -0
- celq-0.1.1/src/args2cel/mod.rs +72 -0
- celq-0.1.1/src/cel2json/mod.rs +52 -0
- celq-0.1.1/src/cli/mod.rs +143 -0
- celq-0.1.1/src/documentation.rs +2 -0
- celq-0.1.1/src/input_handler/input_handler_test.rs +239 -0
- celq-0.1.1/src/input_handler/mod.rs +254 -0
- celq-0.1.1/src/json2cel/json2cel_test.rs +98 -0
- celq-0.1.1/src/json2cel/mod.rs +89 -0
- celq-0.1.1/src/main.rs +101 -0
- celq-0.1.1/tests/golden.rs +576 -0
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
# Usage: publish-npm-binary.sh <build-name> <build-os> <target>
|
|
5
|
+
# Example: publish-npm-binary.sh linux-x64-glibc ubuntu-24.04 x86_64-unknown-linux-gnu
|
|
6
|
+
|
|
7
|
+
BUILD_NAME="$1"
|
|
8
|
+
BUILD_OS="$2"
|
|
9
|
+
TARGET="$3"
|
|
10
|
+
|
|
11
|
+
BIN="celq"
|
|
12
|
+
NPM_DIR="npm"
|
|
13
|
+
|
|
14
|
+
# Read release version from package.json using celq
|
|
15
|
+
RELEASE_VERSION=$(cargo run -- "this.version" < "${NPM_DIR}/celq/package.json")
|
|
16
|
+
RELEASE_VERSION=${RELEASE_VERSION#\"}
|
|
17
|
+
RELEASE_VERSION=${RELEASE_VERSION%\"}
|
|
18
|
+
|
|
19
|
+
# Derive OS and architecture from build name
|
|
20
|
+
# Format: os-arch-variant (e.g., linux-x64-glibc, darwin-arm64)
|
|
21
|
+
node_os=$(echo "$BUILD_NAME" | cut -d '-' -f1)
|
|
22
|
+
node_arch=$(echo "$BUILD_NAME" | cut -d '-' -f2)
|
|
23
|
+
|
|
24
|
+
# Set package name (use 'windows' instead of 'win32')
|
|
25
|
+
if [[ "$BUILD_OS" == windows-* ]]; then
|
|
26
|
+
node_pkg="${BIN}-windows-${node_arch}"
|
|
27
|
+
else
|
|
28
|
+
node_pkg="${BIN}-${node_os}-${node_arch}"
|
|
29
|
+
fi
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
echo "Publishing ${node_pkg} version ${RELEASE_VERSION}"
|
|
33
|
+
|
|
34
|
+
# Create package directory
|
|
35
|
+
mkdir -p "${NPM_DIR}/${node_pkg}/bin"
|
|
36
|
+
|
|
37
|
+
# Generate package.json using celq
|
|
38
|
+
cargo run -- \
|
|
39
|
+
-n \
|
|
40
|
+
-p \
|
|
41
|
+
-S \
|
|
42
|
+
--from-file "${NPM_DIR}/package.json.cel" \
|
|
43
|
+
--arg="node_os:string=${node_os}" \
|
|
44
|
+
--arg="node_arch:string=${node_arch}" \
|
|
45
|
+
--arg="node_version:string=${RELEASE_VERSION}" \
|
|
46
|
+
--arg="node_pkg:string=${node_pkg}" \
|
|
47
|
+
> "${NPM_DIR}/${node_pkg}/package.json"
|
|
48
|
+
|
|
49
|
+
# Copy binary (add .exe extension for Windows)
|
|
50
|
+
binary_name="$BIN"
|
|
51
|
+
if [[ "$BUILD_OS" == windows-* ]]; then
|
|
52
|
+
binary_name="${BIN}.exe"
|
|
53
|
+
fi
|
|
54
|
+
|
|
55
|
+
cp "target/${TARGET}/release/${binary_name}" "${NPM_DIR}/${node_pkg}/bin/"
|
|
56
|
+
cp "LICENSE-MIT" "${NPM_DIR}/${node_pkg}/"
|
|
57
|
+
cp "LICENSE-APACHE" "${NPM_DIR}/${node_pkg}/"
|
|
58
|
+
cp "README.md" "${NPM_DIR}/${node_pkg}/"
|
|
59
|
+
|
|
60
|
+
# Publish package
|
|
61
|
+
cd "${NPM_DIR}/${node_pkg}"
|
|
62
|
+
npm publish --access public
|
|
63
|
+
|
|
64
|
+
echo "Successfully published ${node_pkg}"
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: ["main"]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: ["main"]
|
|
8
|
+
concurrency:
|
|
9
|
+
group: ${{ github.repository }}-${{ github.ref }}-${{ github.head_ref }}
|
|
10
|
+
cancel-in-progress: true
|
|
11
|
+
|
|
12
|
+
env:
|
|
13
|
+
CARGO_TERM_COLOR: always
|
|
14
|
+
|
|
15
|
+
jobs:
|
|
16
|
+
build:
|
|
17
|
+
name: Build (Linux x86-64)
|
|
18
|
+
runs-on: ubuntu-latest
|
|
19
|
+
steps:
|
|
20
|
+
- uses: actions/checkout@v4
|
|
21
|
+
|
|
22
|
+
- name: Install Rust 1.90.0
|
|
23
|
+
uses: dtolnay/rust-toolchain@1.90.0
|
|
24
|
+
|
|
25
|
+
- name: Build with locked dependencies
|
|
26
|
+
run: cargo build --locked
|
|
27
|
+
|
|
28
|
+
format:
|
|
29
|
+
name: Format Check
|
|
30
|
+
runs-on: ubuntu-latest
|
|
31
|
+
steps:
|
|
32
|
+
- uses: actions/checkout@v4
|
|
33
|
+
|
|
34
|
+
- name: Install Rust stable
|
|
35
|
+
uses: dtolnay/rust-toolchain@stable
|
|
36
|
+
with:
|
|
37
|
+
components: rustfmt
|
|
38
|
+
|
|
39
|
+
- name: Check formatting
|
|
40
|
+
run: cargo fmt --all -- --check
|
|
41
|
+
|
|
42
|
+
clippy:
|
|
43
|
+
name: Clippy
|
|
44
|
+
runs-on: ubuntu-latest
|
|
45
|
+
steps:
|
|
46
|
+
- uses: actions/checkout@v4
|
|
47
|
+
|
|
48
|
+
- name: Install Rust 1.90.0
|
|
49
|
+
uses: dtolnay/rust-toolchain@1.90.0
|
|
50
|
+
with:
|
|
51
|
+
components: clippy
|
|
52
|
+
|
|
53
|
+
- name: Run Clippy
|
|
54
|
+
run: cargo clippy --all-targets --all-features -- -D warnings
|
|
55
|
+
|
|
56
|
+
test:
|
|
57
|
+
name: Test
|
|
58
|
+
needs: [build, format, clippy]
|
|
59
|
+
strategy:
|
|
60
|
+
fail-fast: false
|
|
61
|
+
matrix:
|
|
62
|
+
include:
|
|
63
|
+
- os: ubuntu-latest
|
|
64
|
+
target: x86_64-unknown-linux-gnu
|
|
65
|
+
rust: stable
|
|
66
|
+
- os: ubuntu-24.04-arm
|
|
67
|
+
target: aarch64-unknown-linux-gnu
|
|
68
|
+
rust: stable
|
|
69
|
+
- os: macos-latest
|
|
70
|
+
target: aarch64-apple-darwin
|
|
71
|
+
rust: stable
|
|
72
|
+
- os: windows-latest
|
|
73
|
+
target: x86_64-pc-windows-msvc
|
|
74
|
+
rust: stable
|
|
75
|
+
runs-on: ${{ matrix.os }}
|
|
76
|
+
steps:
|
|
77
|
+
- uses: actions/checkout@v4
|
|
78
|
+
|
|
79
|
+
- name: Install Rust ${{ matrix.rust }}
|
|
80
|
+
uses: dtolnay/rust-toolchain@master
|
|
81
|
+
with:
|
|
82
|
+
toolchain: ${{ matrix.rust }}
|
|
83
|
+
targets: ${{ matrix.target }}
|
|
84
|
+
|
|
85
|
+
- name: Run tests
|
|
86
|
+
run: cargo test --target ${{ matrix.target }}
|
|
87
|
+
|
|
88
|
+
docs:
|
|
89
|
+
name: Documentation
|
|
90
|
+
needs: [build, format, clippy]
|
|
91
|
+
runs-on: ubuntu-latest
|
|
92
|
+
steps:
|
|
93
|
+
- uses: actions/checkout@v4
|
|
94
|
+
|
|
95
|
+
- name: Install Rust stable
|
|
96
|
+
uses: dtolnay/rust-toolchain@stable
|
|
97
|
+
|
|
98
|
+
- name: Build documentation
|
|
99
|
+
run: cargo doc --no-deps --all-features
|
|
100
|
+
env:
|
|
101
|
+
RUSTDOCFLAGS: "-D warnings"
|
|
102
|
+
|
|
103
|
+
- name: Upload documentation
|
|
104
|
+
uses: actions/upload-artifact@v4
|
|
105
|
+
with:
|
|
106
|
+
name: documentation
|
|
107
|
+
path: target/doc/
|
|
108
|
+
retention-days: 1
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
name: Publish to crates.io
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
workflow_dispatch: # Manual trigger only
|
|
5
|
+
push:
|
|
6
|
+
tags:
|
|
7
|
+
- "v[0-9]*" # Trigger on version tags like v1.0.0
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
jobs:
|
|
11
|
+
publish:
|
|
12
|
+
runs-on: ubuntu-latest
|
|
13
|
+
environment: crates_io_release
|
|
14
|
+
|
|
15
|
+
steps:
|
|
16
|
+
- name: Checkout code
|
|
17
|
+
uses: actions/checkout@v4
|
|
18
|
+
|
|
19
|
+
- name: Install Rust toolchain
|
|
20
|
+
uses: dtolnay/rust-toolchain@stable
|
|
21
|
+
|
|
22
|
+
- name: Run tests
|
|
23
|
+
run: cargo test
|
|
24
|
+
|
|
25
|
+
- name: Publish to crates.io
|
|
26
|
+
env:
|
|
27
|
+
CARGO_REGISTRY_TOKEN: ${{ secrets.CRATES_IO_TOKEN }}
|
|
28
|
+
run: cargo publish
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
# Release workflow for celq binaries
|
|
2
|
+
# Credit: Inspired by https://github.com/01mf02/jaq/blob/main/.github/workflows/release.yml
|
|
3
|
+
# Also see: https://github.com/BurntSushi/ripgrep/blob/61733f6378b62fa2dc2e7f3eff2f2e7182069ca9/.github/workflows/release.yml
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
name: GitHub Release
|
|
7
|
+
|
|
8
|
+
on:
|
|
9
|
+
workflow_dispatch: # Manual trigger only
|
|
10
|
+
push:
|
|
11
|
+
tags:
|
|
12
|
+
- "v[0-9]*" # Trigger on version tags like v1.0.0
|
|
13
|
+
|
|
14
|
+
defaults:
|
|
15
|
+
run:
|
|
16
|
+
shell: bash
|
|
17
|
+
|
|
18
|
+
env:
|
|
19
|
+
NAME: celq
|
|
20
|
+
VERSION: ${{ github.ref_name }}
|
|
21
|
+
|
|
22
|
+
# Required for gh release upload
|
|
23
|
+
permissions:
|
|
24
|
+
contents: write
|
|
25
|
+
|
|
26
|
+
jobs:
|
|
27
|
+
build:
|
|
28
|
+
name: ${{ matrix.target }}
|
|
29
|
+
runs-on: ${{ matrix.os }}
|
|
30
|
+
environment: github_release
|
|
31
|
+
strategy:
|
|
32
|
+
fail-fast: false
|
|
33
|
+
matrix:
|
|
34
|
+
include:
|
|
35
|
+
# macOS ARM64 (native)
|
|
36
|
+
- { target: aarch64-apple-darwin, os: macos-15 }
|
|
37
|
+
|
|
38
|
+
# Windows x86-64 (native)
|
|
39
|
+
- { target: x86_64-pc-windows-msvc, os: windows-2025 }
|
|
40
|
+
|
|
41
|
+
# Linux x86-64 (native - glibc)
|
|
42
|
+
- { target: x86_64-unknown-linux-gnu, os: ubuntu-24.04 }
|
|
43
|
+
|
|
44
|
+
# Linux x86-64 (native - musl static binary)
|
|
45
|
+
- { target: x86_64-unknown-linux-musl, os: ubuntu-24.04 }
|
|
46
|
+
|
|
47
|
+
# Linux ARM64 (native)
|
|
48
|
+
- { target: aarch64-unknown-linux-gnu, os: ubuntu-24.04-arm }
|
|
49
|
+
|
|
50
|
+
# Linux ARM64 (native - musl static binary)
|
|
51
|
+
- { target: aarch64-unknown-linux-musl, os: ubuntu-24.04-arm }
|
|
52
|
+
|
|
53
|
+
steps:
|
|
54
|
+
- uses: actions/checkout@v4
|
|
55
|
+
|
|
56
|
+
- name: Install Rust toolchain
|
|
57
|
+
uses: dtolnay/rust-toolchain@stable
|
|
58
|
+
with:
|
|
59
|
+
targets: ${{ matrix.target }}
|
|
60
|
+
|
|
61
|
+
- name: Install musl tools (for musl targets)
|
|
62
|
+
if: contains(matrix.target, 'musl')
|
|
63
|
+
run: |
|
|
64
|
+
sudo apt-get update
|
|
65
|
+
sudo apt-get install -y musl-tools
|
|
66
|
+
|
|
67
|
+
- name: Build
|
|
68
|
+
run: cargo build --locked --release --target ${{ matrix.target }}
|
|
69
|
+
|
|
70
|
+
- name: Create release archive
|
|
71
|
+
id: archive
|
|
72
|
+
run: |
|
|
73
|
+
EXE_suffix=""
|
|
74
|
+
case ${{ matrix.target }} in
|
|
75
|
+
*-pc-windows-*) EXE_suffix=".exe" ;;
|
|
76
|
+
esac
|
|
77
|
+
|
|
78
|
+
BIN_PATH="target/${{ matrix.target }}/release/${NAME}${EXE_suffix}"
|
|
79
|
+
BIN_NAME="${NAME}${EXE_suffix}"
|
|
80
|
+
|
|
81
|
+
# Determine archive format based on platform
|
|
82
|
+
case ${{ matrix.target }} in
|
|
83
|
+
*-pc-windows-*)
|
|
84
|
+
# Windows: create .zip archive
|
|
85
|
+
ARCHIVE_NAME="${NAME}-${{ matrix.target }}.zip"
|
|
86
|
+
7z a "${ARCHIVE_NAME}" "${BIN_PATH}"
|
|
87
|
+
;;
|
|
88
|
+
*)
|
|
89
|
+
# Linux/macOS: create .tar.gz archive
|
|
90
|
+
ARCHIVE_NAME="${NAME}-${{ matrix.target }}.tar.gz"
|
|
91
|
+
tar czf "${ARCHIVE_NAME}" -C "target/${{ matrix.target }}/release" "${BIN_NAME}"
|
|
92
|
+
;;
|
|
93
|
+
esac
|
|
94
|
+
|
|
95
|
+
echo "ARCHIVE_NAME=${ARCHIVE_NAME}" >> $GITHUB_OUTPUT
|
|
96
|
+
|
|
97
|
+
- name: Upload release archive
|
|
98
|
+
env:
|
|
99
|
+
GH_TOKEN: ${{ github.token }}
|
|
100
|
+
run: gh release upload ${VERSION} ${{ steps.archive.outputs.ARCHIVE_NAME }}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
# Release workflow to publish NPM packages
|
|
2
|
+
# Courtesy of: https://github.com/orhun/packaging-rust-for-npm/blob/4640d8a33491cc68cddc257b5966c8caa3b4e8c8/.github/workflows/cd.yml#L1
|
|
3
|
+
name: Publish to NPM
|
|
4
|
+
|
|
5
|
+
on:
|
|
6
|
+
workflow_dispatch: # Manual trigger only
|
|
7
|
+
push:
|
|
8
|
+
tags:
|
|
9
|
+
- "v[0-9]*" # Trigger on version tags like v1.0.0
|
|
10
|
+
|
|
11
|
+
permissions:
|
|
12
|
+
# IMPORTANT: this permission is mandatory for Trusted Publishing
|
|
13
|
+
id-token: write
|
|
14
|
+
contents: read
|
|
15
|
+
|
|
16
|
+
jobs:
|
|
17
|
+
publish-npm-binaries:
|
|
18
|
+
name: Publish NPM packages
|
|
19
|
+
runs-on: ${{ matrix.build.os }}
|
|
20
|
+
environment: npm_release
|
|
21
|
+
strategy:
|
|
22
|
+
fail-fast: false
|
|
23
|
+
matrix:
|
|
24
|
+
build:
|
|
25
|
+
- {
|
|
26
|
+
NAME: linux-x64-glibc,
|
|
27
|
+
OS: ubuntu-24.04,
|
|
28
|
+
TOOLCHAIN: stable,
|
|
29
|
+
TARGET: x86_64-unknown-linux-gnu,
|
|
30
|
+
}
|
|
31
|
+
- {
|
|
32
|
+
NAME: linux-arm64-glibc,
|
|
33
|
+
OS: ubuntu-24.04-arm,
|
|
34
|
+
TOOLCHAIN: stable,
|
|
35
|
+
TARGET: aarch64-unknown-linux-gnu,
|
|
36
|
+
}
|
|
37
|
+
- {
|
|
38
|
+
NAME: win32-x64-msvc,
|
|
39
|
+
OS: windows-2025,
|
|
40
|
+
TOOLCHAIN: stable,
|
|
41
|
+
TARGET: x86_64-pc-windows-msvc,
|
|
42
|
+
}
|
|
43
|
+
- {
|
|
44
|
+
NAME: win32-arm64-msvc,
|
|
45
|
+
OS: windows-2025,
|
|
46
|
+
TOOLCHAIN: stable,
|
|
47
|
+
TARGET: aarch64-pc-windows-msvc,
|
|
48
|
+
}
|
|
49
|
+
- {
|
|
50
|
+
NAME: darwin-x64,
|
|
51
|
+
OS: macos-15,
|
|
52
|
+
TOOLCHAIN: stable,
|
|
53
|
+
TARGET: x86_64-apple-darwin,
|
|
54
|
+
}
|
|
55
|
+
- {
|
|
56
|
+
NAME: darwin-arm64,
|
|
57
|
+
OS: macos-15,
|
|
58
|
+
TOOLCHAIN: stable,
|
|
59
|
+
TARGET: aarch64-apple-darwin,
|
|
60
|
+
}
|
|
61
|
+
steps:
|
|
62
|
+
- name: Checkout
|
|
63
|
+
uses: actions/checkout@v4
|
|
64
|
+
|
|
65
|
+
- name: Install Rust toolchain
|
|
66
|
+
uses: dtolnay/rust-toolchain@stable
|
|
67
|
+
with:
|
|
68
|
+
targets: ${{ matrix.build.TARGET }}
|
|
69
|
+
|
|
70
|
+
- name: Build
|
|
71
|
+
run: cargo build --release --locked --target ${{ matrix.build.TARGET }}
|
|
72
|
+
|
|
73
|
+
- name: Install node
|
|
74
|
+
uses: actions/setup-node@v6
|
|
75
|
+
with:
|
|
76
|
+
node-version: "24"
|
|
77
|
+
registry-url: "https://registry.npmjs.org"
|
|
78
|
+
|
|
79
|
+
- name: Make publish script executable
|
|
80
|
+
shell: bash
|
|
81
|
+
run: chmod +xw ./.github/scripts/publish-npm-binary.sh
|
|
82
|
+
|
|
83
|
+
- name: Publish to NPM
|
|
84
|
+
shell: bash
|
|
85
|
+
run: |
|
|
86
|
+
./.github/scripts/publish-npm-binary.sh \
|
|
87
|
+
"${{ matrix.build.NAME }}" \
|
|
88
|
+
"${{ matrix.build.OS }}" \
|
|
89
|
+
"${{ matrix.build.TARGET }}"
|
|
90
|
+
|
|
91
|
+
publish-npm-base:
|
|
92
|
+
name: Publish the base NPM package
|
|
93
|
+
needs: publish-npm-binaries
|
|
94
|
+
environment: npm_release
|
|
95
|
+
runs-on: ubuntu-24.04
|
|
96
|
+
steps:
|
|
97
|
+
- name: Checkout
|
|
98
|
+
uses: actions/checkout@v4
|
|
99
|
+
|
|
100
|
+
- name: Install node
|
|
101
|
+
uses: actions/setup-node@v6
|
|
102
|
+
with:
|
|
103
|
+
node-version: "24"
|
|
104
|
+
registry-url: "https://registry.npmjs.org"
|
|
105
|
+
|
|
106
|
+
- name: Publish the package
|
|
107
|
+
continue-on-error: true
|
|
108
|
+
shell: bash
|
|
109
|
+
run: |
|
|
110
|
+
STABLE_OR_NOT=$(cargo run -- --from-file ./.github/scripts/stable_or_not.cel < "npm/celq/package.json")
|
|
111
|
+
STABLE_OR_NOT=${STABLE_OR_NOT#\"}
|
|
112
|
+
STABLE_OR_NOT=${STABLE_OR_NOT%\"}
|
|
113
|
+
cd npm/celq
|
|
114
|
+
yarn install # requires optional dependencies to be present in the registry
|
|
115
|
+
yarn build
|
|
116
|
+
npm publish --access public --tag "$STABLE_OR_NOT"
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
name: Release to PyPI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
workflow_dispatch: # Manual trigger only
|
|
5
|
+
push:
|
|
6
|
+
tags:
|
|
7
|
+
- "v[0-9]*" # Trigger on version tags like v1.0.0
|
|
8
|
+
|
|
9
|
+
permissions:
|
|
10
|
+
# IMPORTANT: this permission is mandatory for Trusted Publishing
|
|
11
|
+
id-token: write
|
|
12
|
+
contents: read
|
|
13
|
+
|
|
14
|
+
jobs:
|
|
15
|
+
publish-binaries:
|
|
16
|
+
name: Publish binaries
|
|
17
|
+
runs-on: ${{ matrix.build.os }}
|
|
18
|
+
environment: pypi_release
|
|
19
|
+
strategy:
|
|
20
|
+
fail-fast: false
|
|
21
|
+
matrix:
|
|
22
|
+
build:
|
|
23
|
+
- {
|
|
24
|
+
NAME: linux-x64,
|
|
25
|
+
OS: ubuntu-24.04,
|
|
26
|
+
TOOLCHAIN: stable,
|
|
27
|
+
TARGET: x86_64-unknown-linux-gnu,
|
|
28
|
+
}
|
|
29
|
+
- {
|
|
30
|
+
NAME: linux-arm64,
|
|
31
|
+
OS: ubuntu-24.04-arm,
|
|
32
|
+
TOOLCHAIN: stable,
|
|
33
|
+
TARGET: aarch64-unknown-linux-gnu,
|
|
34
|
+
}
|
|
35
|
+
- {
|
|
36
|
+
NAME: win32-x64-msvc,
|
|
37
|
+
OS: windows-2025,
|
|
38
|
+
TOOLCHAIN: stable,
|
|
39
|
+
TARGET: x86_64-pc-windows-msvc,
|
|
40
|
+
}
|
|
41
|
+
- {
|
|
42
|
+
NAME: darwin-arm64,
|
|
43
|
+
OS: macos-15,
|
|
44
|
+
TOOLCHAIN: stable,
|
|
45
|
+
TARGET: aarch64-apple-darwin,
|
|
46
|
+
}
|
|
47
|
+
steps:
|
|
48
|
+
- name: Checkout
|
|
49
|
+
uses: actions/checkout@v4
|
|
50
|
+
|
|
51
|
+
- name: Install Rust ${{ matrix.build.TOOLCHAIN }}
|
|
52
|
+
uses: dtolnay/rust-toolchain@stable
|
|
53
|
+
with:
|
|
54
|
+
toolchain: ${{ matrix.build.TOOLCHAIN }}
|
|
55
|
+
targets: ${{ matrix.build.TARGET }}
|
|
56
|
+
|
|
57
|
+
- name: Install uv
|
|
58
|
+
uses: astral-sh/setup-uv@v7
|
|
59
|
+
with:
|
|
60
|
+
version: "0.9.22"
|
|
61
|
+
|
|
62
|
+
- name: Install Python 3.12
|
|
63
|
+
run: uv python install 3.12
|
|
64
|
+
|
|
65
|
+
- name: Build Python wheels (Linux with cibuildwheel)
|
|
66
|
+
if: runner.os == 'Linux'
|
|
67
|
+
run: |
|
|
68
|
+
uvx cibuildwheel@3.3.1 --output-dir pypi/dist pypi
|
|
69
|
+
|
|
70
|
+
- name: Build Python wheels (Windows/macOS)
|
|
71
|
+
if: runner.os != 'Linux'
|
|
72
|
+
working-directory: pypi
|
|
73
|
+
run: |
|
|
74
|
+
uv build --wheel --out-dir dist
|
|
75
|
+
|
|
76
|
+
- name: Publish wheels to PyPI
|
|
77
|
+
run: uv publish --trusted-publishing always pypi/dist/*.whl
|
|
78
|
+
|
|
79
|
+
- name: Build source distribution
|
|
80
|
+
if: matrix.build.TARGET == 'x86_64-unknown-linux-gnu'
|
|
81
|
+
working-directory: pypi
|
|
82
|
+
run: |
|
|
83
|
+
uv build --sdist --out-dir dist
|
|
84
|
+
|
|
85
|
+
- name: Publish source distribution to PyPI
|
|
86
|
+
if: matrix.build.TARGET == 'x86_64-unknown-linux-gnu'
|
|
87
|
+
run: uv publish --trusted-publishing always pypi/dist/*.tar.gz
|
celq-0.1.1/.gitignore
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Generated by Cargo
|
|
2
|
+
# will have compiled files and executables
|
|
3
|
+
debug
|
|
4
|
+
target
|
|
5
|
+
|
|
6
|
+
# These are backup files generated by rustfmt
|
|
7
|
+
**/*.rs.bk
|
|
8
|
+
|
|
9
|
+
# MSVC Windows builds of rustc generate these, which store debugging information
|
|
10
|
+
*.pdb
|
|
11
|
+
|
|
12
|
+
# Generated by cargo mutants
|
|
13
|
+
# Contains mutation testing data
|
|
14
|
+
**/mutants.out*/
|
|
15
|
+
|
|
16
|
+
# RustRover
|
|
17
|
+
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
|
|
18
|
+
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
|
|
19
|
+
# and can be added to the global gitignore or merged into this file. For a more nuclear
|
|
20
|
+
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
|
|
21
|
+
#.idea/
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
# Added by cargo
|
|
25
|
+
|
|
26
|
+
/target
|
|
27
|
+
.DS_Store
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# Contributing
|
|
2
|
+
|
|
3
|
+
## Building
|
|
4
|
+
|
|
5
|
+
`celq` is built with Rust. To contribute, you'll need to have `cargo` installed. If you don't, check
|
|
6
|
+
[rustup](https://rustup.rs/) for the most popular way of installing.
|
|
7
|
+
|
|
8
|
+
Once you have `cargo`, simply run:
|
|
9
|
+
|
|
10
|
+
```bash
|
|
11
|
+
cargo build
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
To use the local binary, `cargo run -- <ARGS>` is your friend.
|
|
15
|
+
|
|
16
|
+
## Bug Fixes and Features
|
|
17
|
+
|
|
18
|
+
If `celq` has a bug or is missing a feature, please:
|
|
19
|
+
1. Open an issue
|
|
20
|
+
2. Discuss the proposed bug fix/ feature design
|
|
21
|
+
3. Send a PR with tests
|
|
22
|
+
|
|
23
|
+
## Tests
|
|
24
|
+
|
|
25
|
+
To run the tests:
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
cargo test
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
`celq` has two kind of tests: unit tests and integration tests.
|
|
32
|
+
|
|
33
|
+
Unit tests live very close to the implementation. Next to the `mod.rs`, there's generally a `module_test.rs`. It's fine to use unit tests for smaller details.
|
|
34
|
+
|
|
35
|
+
Integration tests live in the `test/` folder, mostly in `tests/golden.rs`. When fixing a bug or adding a feature, please try to add a test covering multiple combinations to that file.
|
|
36
|
+
|
|
37
|
+
## Documentation
|
|
38
|
+
|
|
39
|
+
The `celq` manual lives in docs.rs. To build it locally, run:
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
cargo doc --open --no-deps
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Despite `celq` being a binary, docs.rs reads from `src/lib.rs`. Our current documentation lives in the `docs/` folder, so `src/lib.rs` should exclusively include the markdown from the docs folder.
|
|
46
|
+
|
|
47
|
+
## Packaging
|
|
48
|
+
|
|
49
|
+
Packaging `celq` for Linux, macOS, and Windows is a welcome contribution. If you add `celq` to a packaging repository, feel free to send a Pull Request updating the README to list that installation method.
|
|
50
|
+
|
|
51
|
+
## MSRV
|
|
52
|
+
|
|
53
|
+
The Minimum Supported Rust Version (MSRV) of `celq` trys to align with the MSRV of Debian stable. To see their current MSRV, search for [rustc](https://packages.debian.org/search?keywords=rustc) and see the version listed for testing.
|
|
54
|
+
|
|
55
|
+
Notice that eventually that may lag behind the latest of rustc by a considerable margin. However, that guarantees that `celq` can be packaged by many Linux distributions.
|