#!/usr/bin/env nu def "main docs" [] { cargo +nightly docs-rs if $env.LAST_EXIT_CODE != 0 { print "docs-rs build failed" exit 1 } else { cargo doc --no-deps --all-features cd fixcol-derive cargo doc --no-deps --document-private-items } } def tests [] { cargo +nightly docs-rs cargo test --workspace -- --include-ignored cargo test --workspace --features experimental-write -- --include-ignored } def "main test" [] { tests } def "main deploy" [] { # Confirm version consistency between all sub-crates let $ws_versions = cargo metadata --format-version 1 | from json | get workspace_members | each {|m| split row '#' | last } let $version = $ws_versions.0 # assert every element of $ws_versions is equal to $version if ($ws_versions | any {|v| $v != $version}) { print 'Conflicting versions of crates to deploy.' exit 1 } # assert current version is not published let $published_versions = http get https://crates.io/api/v1/crates/fixcol | get versions.num if ($published_versions | any { |v| $v == $version }) { print $'Version ($version) has already been released on crates.io.' exit 1 } # assert current version is mentioned in the change log if (open CHANGELOG.md | lines | where $it =~ $version | is-empty) { print $'Version ($version) is not present in CHANGELOG. Please update.' exit 1 } # assert that fixcol is referencing the current version of fixcol-derive let $derive_version = cargo metadata --format-version 1 | from json | get packages | where $it.name == 'fixcol' | get dependencies.0 | where $it.name == 'fixcol-derive' | get req.0 if (($derive_version | str substring 1..-1) != $version) { print $'Fixcol depends on version $(derive_version) of fixcol-derive but ($version) is current.' exit 1 } # Run the full suite of tests - equivalent to `./build.nu test` tests # Add the version tag to the current commit if (git -P tag --points-at HEAD | lines | any { |t| $t == $'v($version)' }) == false { # confirm tag does not exist and create it let $tagged_versions = git -P tag -l 'v*' | lines | each { |t| str substring 1..-1 } if ($tagged_versions | any { |t| $t == $version}) { print $'A git tag for version ($version) already exists.' exit 1 } git tag $'v($version)' git push origin --tags } # Publish fixcol-derive then fixcol cd fixcol-derive cargo publish cd - cargo publish } def main [] {}