diff --git a/.github/workflows/publish-dry-run.yml b/.github/workflows/publish-dry-run.yml new file mode 100644 index 00000000..e2c683e5 --- /dev/null +++ b/.github/workflows/publish-dry-run.yml @@ -0,0 +1,87 @@ +name: Publish Dry Run + +on: + workflow_call: + inputs: + crates: + description: 'Space separated list of crate names in the order to be published.' + required: true + type: string + runs-on: + required: false + default: 'ubuntu-latest' + type: string + target: + required: false + default: 'x86_64-unknown-linux-gnu' + type: string + cargo-hack-feature-options: + required: false + default: '--feature-powerset' + type: string + +jobs: + + publish-dry-run: + runs-on: ${{ inputs.runs-on }} + defaults: + run: + shell: bash + env: + CARGO_BUILD_TARGET: ${{ inputs.target }} + CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER: aarch64-linux-gnu-gcc + steps: + - uses: actions/checkout@v3 + + - uses: stellar/actions/rust-cache@main + + - run: rustup update + - run: rustup target add ${{ inputs.target }} + - if: inputs.target == 'aarch64-unknown-linux-gnu' + run: sudo apt-get update && sudo apt-get -y install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu + + - uses: stellar/binaries@v18 + with: + name: cargo-hack + version: 0.5.28 + + # Vendor all the dependencies into the vendor/ folder. Temporarily remove + # [patch.crates-io] entries in the workspace Cargo.toml that reference git + # repos. These will be removed when published. + - name: Vendor Dependencies + run: | + cargo vendor --versioned-dirs + + # Package the crates that will be published. Verification is disabled + # because we aren't ready to verify yet. Add each crate that was packaged to + # the vendor/ directory. + - name: Package Crates ${{ inputs.crates }} + run: | + for name in ${{ inputs.crates }} + do + version=$(cargo metadata --format-version 1 | jq -r '.packages[] | select(.name=="'$name'") | .version') + cargo package \ + --no-verify \ + --package $name \ + --config "source.crates-io.replace-with = 'vendored-sources'" \ + --config "source.vendored-sources.directory = 'vendor'" + path="target/package/${name}-${version}.crate" + tar xvfz "$path" -C vendor/ + # Crates in the vendor directory require a checksum file, but it doesn't + # matter if it is empty. + echo '{"files":{}}' > vendor/$name-$version/.cargo-checksum.json + done + + # Rerun the package command but with verification enabled this time. Tell + # cargo to use the local vendor/ directory as the source for all packages. Run + # the package command on the full feature powerset so that all features of + # each crate are verified to compile. + - name: Verify Crates with ${{ inputs.cargo-hack-feature-options }} + run: > + cargo-hack hack + ${{ inputs.cargo-hack-feature-options }} + --ignore-private + --config "source.crates-io.replace-with = 'vendored-sources'" + --config "source.vendored-sources.directory = 'vendor'" + package + --target ${{ inputs.target }} \ No newline at end of file diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index 21ac6bd7..46eaa7fc 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -115,7 +115,7 @@ jobs: - os: windows-latest-8-cores target: x86_64-pc-windows-msvc cargo-hack-feature-options: --features opt --ignore-unknown-features - uses: stellar/actions/.github/workflows/rust-publish-dry-run-v2.yml@main + uses: stellar/soroban-rpc/.github/workflows/rust-publish-dry-run.yml@main with: crates: soroban-rpc runs-on: ${{ matrix.os }} diff --git a/Cargo.toml b/Cargo.toml index 6e4d8a4d..534a125f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -70,6 +70,8 @@ version = "=20.3.1" [workspace.dependencies.soroban-cli] version = "20.3.0" +git = "https://github.com/stellar/soroban-tools" +rev = "a1e51d263df80682a3dab2b00738700c7326f872" [workspace.dependencies.soroban-rpc] version = "20.3.0"