Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
92 changes: 84 additions & 8 deletions .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ on:
tags:
- release-*
paths-ignore:
- "site/**/*"
- site/**/*
- schemas/**/*
- util/**/*
workflow_dispatch: {}
Expand All @@ -26,7 +26,7 @@ jobs:
rustup toolchain install nightly --profile minimal
rustup component add --toolchain nightly rustfmt
- name: Check fmt
run: cargo +nightly fmt
run: cargo +nightly fmt --check

test:
name: Test on Rust stable
Expand Down Expand Up @@ -54,14 +54,15 @@ jobs:
- uses: Swatinem/rust-cache@v2
- name: Retrieve toml-test
run: |
wget https://github.com/toml-lang/toml-test/releases/download/v2.1.0/toml-test-v2.1.0-linux-amd64.gz
gunzip toml-test-v2.1.0-linux-amd64.gz
chmod +x toml-test-v2.1.0-linux-amd64
wget https://github.com/toml-lang/toml-test/releases/download/v2.2.0/toml-test-v2.2.0-linux-amd64.gz
echo "08f9e0a97da1151c33debf01358a8f5ef45e2a56be201241ae5eb5c2e9323fef toml-test-v2.2.0-linux-amd64.gz" | sha256sum -c -
gunzip toml-test-v2.2.0-linux-amd64.gz
chmod +x toml-test-v2.2.0-linux-amd64
- name: Build olpat-cli
run: |
cargo build --bin olpat --no-default-features --features "rustls-tls,toml-test"
- name: Run toml-test
run: ./toml-test-v2.1.0-linux-amd64 test -toml 1.1 -skip 'invalid/control/cr,invalid/control/multi-cr,invalid/control/rawmulti-cr,invalid/table/append-with-dotted-keys-04,invalid/table/super-twice,valid/array/array,valid/comment/everywhere,valid/comment/nonascii,valid/datetime/datetime,valid/datetime/edge,valid/datetime/leap-year,valid/datetime/local,valid/datetime/local-date,valid/datetime/local-time,valid/datetime/milliseconds,valid/datetime/no-seconds,valid/datetime/timezone,valid/example,valid/key/numeric-04,valid/key/quoted-unicode,valid/spec-1.1.0/common-12,valid/spec-1.1.0/common-27,valid/spec-1.1.0/common-28,valid/spec-1.1.0/common-29,valid/spec-1.1.0/common-30,valid/spec-1.1.0/common-31,valid/spec-1.1.0/common-32,valid/spec-1.1.0/common-33,valid/spec-1.1.0/common-34,valid/spec-1.1.0/common-44,valid/spec-example-1,valid/spec-example-1-compact,valid/string/escape-esc,valid/string/hex-escape,valid/string/quoted-unicode' -decoder "./target/debug/olpat toml-test"
run: ./toml-test-v2.2.0-linux-amd64 test -toml 1.1 -skip 'invalid/control/cr,invalid/control/multi-cr,invalid/control/rawmulti-cr,invalid/table/append-with-dotted-keys-04,invalid/table/super-twice,valid/array/array,valid/comment/everywhere,valid/comment/nonascii,valid/datetime/datetime,valid/datetime/edge,valid/datetime/leap-year,valid/datetime/local,valid/datetime/local-date,valid/datetime/local-time,valid/datetime/milliseconds,valid/datetime/no-seconds,valid/datetime/timezone,valid/example,valid/key/numeric-04,valid/key/quoted-unicode,valid/spec-1.1.0/common-12,valid/spec-1.1.0/common-27,valid/spec-1.1.0/common-28,valid/spec-1.1.0/common-29,valid/spec-1.1.0/common-30,valid/spec-1.1.0/common-31,valid/spec-1.1.0/common-32,valid/spec-1.1.0/common-33,valid/spec-1.1.0/common-34,valid/spec-1.1.0/common-44,valid/spec-example-1,valid/spec-example-1-compact,valid/string/escape-esc,valid/string/hex-escape,valid/string/quoted-unicode' -decoder "./target/debug/olpat toml-test"

test-msrv-lib:
name: Test libraries with MSRV
Expand All @@ -76,7 +77,7 @@ jobs:
- name: Test MSRV for olpat
run: |
cargo check -p olpat-lsp-async-stub -p olpat-common -p olpat-lsp -p olpat
cargo test -p olpat-lsp-async-stub -p olpat-common -p olpat-lsp -p olpat
cargo test -p olpat-lsp-async-stub -p olpat-common -p olpat-lsp -p olpat

test-msrv-bin:
name: Test binaries with MSRV
Expand All @@ -91,4 +92,79 @@ jobs:
- name: Test olpat-cli
run: |
cargo check -p olpat-cli
cargo test -p olpat-cli
cargo test -p olpat-cli

build_test_pypi_olpat_cli:
name: Build python wheels
if: contains(fromJSON('["push", "workflow_dispatch", "pull_request"]'), github.event_name)
runs-on: ${{ matrix.os }}-latest
strategy:
fail-fast: false
matrix:
os: [ubuntu, windows, macos]
arch: [x86, x64] # TODO: add aarch64 once it's supported again
exclude:
- os: windows
arch: aarch64
- os: macos
arch: x86
steps:
- uses: actions/checkout@v4
- name: Set commit-based dev version
# Release tags keep the real crate version; every other build gets a unique
# PEP 440 dev version (e.g. 0.10.0.dev123) so TestPyPI accepts each commit.
if: ${{ !startsWith(github.ref, 'refs/tags/') }}
shell: bash
run: bash scripts/set-dev-version.sh crates/olpat-cli/Cargo.toml "${{ github.run_number }}"
- name: Set CFLAGS for aarch64 on Ubuntu
if: matrix.os == 'ubuntu' && matrix.arch == 'aarch64'
# Workaround issue cross-compiling to aarch64 https://github.com/bobzilladev/ring-poc
run: |
echo "CFLAGS_aarch64_unknown_linux_gnu=-D__ARM_ARCH=8" >> $GITHUB_ENV
- name: Build sdist
if: matrix.os == 'ubuntu' && matrix.arch == 'x64'
uses: PyO3/maturin-action@v1
with:
command: sdist
args: --out dist
- name: Build wheels
uses: PyO3/maturin-action@v1
with:
target: ${{ matrix.arch }}
args: --release --out dist
sccache: "true"
manylinux: auto
- name: Upload wheels
uses: actions/upload-artifact@v7
with:
name: wheels-${{ matrix.os }}-${{ matrix.arch }}
path: dist

publish-to-testpypi:
name: Publish Python 🐍 distribution 📦 to TestPyPI
needs:
- build_test_pypi_olpat_cli
runs-on: ubuntu-latest

concurrency:
group: publish-to-testpypi
cancel-in-progress: false

environment:
name: testpypi
url: https://test.pypi.org/p/olpat

permissions:
id-token: write # IMPORTANT: mandatory for trusted publishing

steps:
- name: Download all the dists
uses: actions/download-artifact@v8
with:
pattern: wheels-*
merge-multiple: true
path: dist/
- name: Publish distribution 📦 to TestPyPI
uses: pypa/gh-action-pypi-publish@release/v1
with:
repository-url: https://test.pypi.org/legacy/
75 changes: 75 additions & 0 deletions .github/workflows/releases-pypi.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
name: Releases-pypi

on:
push:
tags:
- olpat-cli-*
workflow_dispatch:

build_pypi_olpat_cli:
name: Build python wheels
runs-on: ${{ matrix.os }}-latest
strategy:
fail-fast: false
matrix:
os: [ubuntu, windows, macos]
arch: [x86, x64] # TODO: add aarch64 once it's supported again
exclude:
- os: windows
arch: aarch64
- os: macos
arch: x86
steps:
- uses: actions/checkout@v4
- name: Set CFLAGS for aarch64 on Ubuntu
if: matrix.os == 'ubuntu' && matrix.arch == 'aarch64'
# Workaround issue cross-compiling to aarch64 https://github.com/bobzilladev/ring-poc
run: |
echo "CFLAGS_aarch64_unknown_linux_gnu=-D__ARM_ARCH=8" >> $GITHUB_ENV
- name: Build sdist
if: matrix.os == 'ubuntu' && matrix.arch == 'x64'
uses: PyO3/maturin-action@v1
with:
command: sdist
args: --out dist
- name: Build wheels
uses: PyO3/maturin-action@v1
with:
target: ${{ matrix.arch }}
args: --release --out dist
sccache: "true"
manylinux: auto
- name: Upload wheels
uses: actions/upload-artifact@v7
with:
name: wheels-${{ matrix.os }}-${{ matrix.arch }}
path: dist

publish-to-pypi:
name: Publish Python 🐍 distribution 📦 to PyPi
needs:
- build_pypi_olpat_cli
runs-on: ubuntu-latest

concurrency:
group: publish-to-pypi
cancel-in-progress: false

environment:
name: pypi
url: https://pypi.org/p/olpat

permissions:
id-token: write # IMPORTANT: mandatory for trusted publishing

steps:
- name: Download all the dists
uses: actions/download-artifact@v8
with:
pattern: wheels-*
merge-multiple: true
path: dist/
- name: Publish distribution 📦 to PyPi
uses: pypa/gh-action-pypi-publish@release/v1
with:
repository-url: https://pypi.org/legacy/
10 changes: 7 additions & 3 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ build-backend = "maturin"
[project]
name = "olpat"
description = "A CLI for the olpat TOML toolkit (a maintained fork of taplo)"
authors = [{ name = "tamasfe" }]
maintainers = [{ name = "Jakub Panek" }]
authors = [{ name = "tamasfe" }, { name = "weichweich" }]
maintainers = [{ name = "weichweich" }]
requires-python = ">=3.8"
dynamic = ["version"]

Expand Down Expand Up @@ -36,11 +36,15 @@ classifiers = [

[project.urls]
Homepage = "https://github.com/weichweich/olpat"
Documentation = "https://taplo.tamasfe.dev/cli/introduction.html"
Documentation = "https://docs.olpat.eu"
Repository = "https://github.com/weichweich/olpat.git"
Tracker = "https://github.com/weichweich/olpat/issues"
Changelog = "https://github.com/weichweich/olpat/blob/master/crates/olpat-cli/CHANGELOG.md"

[tool.maturin]
bindings = "bin"
manifest-path = "crates/olpat-cli/Cargo.toml"
# The workspace-root LICENSE lives outside the crate dir, so `cargo package`
# leaves it out of the sdist even though maturin records `License-File: LICENSE`.
# Explicitly ship it so PyPI's metadata validation passes.
include = [{ path = "LICENSE", format = "sdist" }]
21 changes: 21 additions & 0 deletions scripts/set-dev-version.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
#!/usr/bin/env bash
# Rewrite a crate's version to a unique PEP 440 dev version for CI publishing.
#
# maturin parses the Cargo.toml version string directly as a PEP 440 version,
# so "0.10.0-dev.123" (valid SemVer) normalizes to "0.10.0.dev123", which
# TestPyPI accepts as a distinct release for every build.
#
# Usage: set-dev-version.sh <manifest-path> <build-number>
set -euo pipefail

manifest="${1:?usage: set-dev-version.sh <manifest-path> <build-number>}"
build="${2:?usage: set-dev-version.sh <manifest-path> <build-number>}"

base=$(grep -m1 '^version' "$manifest" | sed -E 's/.*"([^"]+)".*/\1/')
base=${base%%-*} # drop any existing pre-release suffix
dev="${base}-dev.${build}"

sed -i.bak -E "s/^version[[:space:]]*=.*/version = \"${dev}\"/" "$manifest"
rm -f "${manifest}.bak"

echo "Building dev version ${dev}"
Loading