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
60 changes: 30 additions & 30 deletions .github/workflows/pr.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -18,36 +18,36 @@ jobs:
with:
command: check licenses

wasm_build:
name: Build Project for WASM target
runs-on: ubuntu-latest

steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Install Rust toolchain
run: |
rustup toolchain install 1.79 --profile minimal --target wasm32-unknown-unknown
rustup target add wasm32-unknown-unknown
echo "RUST_VERSION_HASH=$(rustc --version | sha256sum | awk '{print $1}')" >> $GITHUB_ENV

- name: Install Foundry
uses: foundry-rs/foundry-toolchain@v1

- name: Cache cargo
uses: actions/cache@v3
with:
path: |
~/.cargo/
./target/wasm32-unknown-unknown/release/
key: ${{ runner.os }}-rust-${{ env.RUST_VERSION_HASH }}-cargo-${{ hashFiles('./Cargo.lock') }}-${{ github.run_id }}

- name: Build WASM for txtx-core
run: cargo build --package txtx-core --release --locked --target wasm32-unknown-unknown --features wasm --no-default-features

- name: Build WASM for txtx-addon-kit
run: cargo build --package txtx-addon-kit --release --locked --target wasm32-unknown-unknown --features wasm --no-default-features
# wasm_build:
# name: Build Project for WASM target
# runs-on: ubuntu-latest

# steps:
# - name: Checkout repository
# uses: actions/checkout@v4

# - name: Install Rust toolchain
# run: |
# rustup toolchain install 1.79 --profile minimal --target wasm32-unknown-unknown
# rustup target add wasm32-unknown-unknown
# echo "RUST_VERSION_HASH=$(rustc --version | sha256sum | awk '{print $1}')" >> $GITHUB_ENV

# - name: Install Foundry
# uses: foundry-rs/foundry-toolchain@v1

# - name: Cache cargo
# uses: actions/cache@v3
# with:
# path: |
# ~/.cargo/
# ./target/wasm32-unknown-unknown/release/
# key: ${{ runner.os }}-rust-${{ env.RUST_VERSION_HASH }}-cargo-${{ hashFiles('./Cargo.lock') }}-${{ github.run_id }}

# - name: Build WASM for txtx-core
# run: cargo build --package txtx-core --release --locked --target wasm32-unknown-unknown --features wasm --no-default-features

# - name: Build WASM for txtx-addon-kit
# run: cargo build --package txtx-addon-kit --release --locked --target wasm32-unknown-unknown --features wasm --no-default-features

tests:
name: Run Test Suite
Expand Down
21 changes: 7 additions & 14 deletions .github/workflows/release_cli.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,11 @@ on:
- main
- ci/windows
workflow_dispatch:
inputs:
supervisor_ui_version:
description: Supervisor UI release version to embed, without the leading v. Leave empty to use the latest release.
required: false
type: string

concurrency:
group: ${{ github.workflow }} @ ${{ github.event.pull_request.head.label || github.head_ref || github.ref }}
Expand Down Expand Up @@ -85,20 +90,6 @@ jobs:
with:
path: txtx

- name: Checkout Supervisor UI
uses: actions/checkout@v4
with:
repository: txtx/txtx-supervisor-ui
token: ${{ secrets.TXTX_ACCESS_TOKEN }}
path: txtx-supervisor-ui

- name: Build Supervisor UI
run: |
cd txtx-supervisor-ui
npm ci
npm run build
cd ..

- name: Install Foundry
uses: foundry-rs/foundry-toolchain@v1

Expand Down Expand Up @@ -143,6 +134,8 @@ jobs:
echo "PRE_GYP_TARGET_NAME=${{ matrix.platform }}-${{ matrix.architecture }}-unknown" >> $GITHUB_ENV

- name: Build - Cargo
env:
TXTX_SUPERVISOR_UI_VERSION: ${{ inputs.supervisor_ui_version }}
run:
cargo build --manifest-path ./txtx/Cargo.toml --release --locked --target ${{ matrix.target }} --features supervisor_ui

Expand Down
158 changes: 84 additions & 74 deletions .github/workflows/release_crates.yaml
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
name: Publish Rust Crates

on:
pull_request:
push:
branches:
- main
- ci/release

jobs:
publish:
Expand All @@ -15,33 +13,31 @@ jobs:
uses: actions/checkout@v4
with:
path: txtx
fetch-depth: 0

- name: Checkout Supervisor UI
uses: actions/checkout@v4
with:
repository: txtx/txtx-supervisor-ui
token: ${{ secrets.TXTX_ACCESS_TOKEN }}
path: txtx-supervisor-ui

- name: Build Supervisor UI
- name: Download Supervisor UI release
shell: bash
run: |
cd txtx-supervisor-ui
npm i
npm run build
cp -r dist ../txtx/crates/txtx-supervisor-ui/supervisor-dist
SUPERVISOR_UI_TAG="$(gh release view --repo solana-foundation/txtx-supervisor-ui --json tagName --jq '.tagName')"
echo "Using supervisor UI release ${SUPERVISOR_UI_TAG}"

rm -rf txtx/crates/txtx-supervisor-ui/supervisor-dist
mkdir -p txtx/crates/txtx-supervisor-ui/supervisor-dist

curl -fsSL \
--retry 3 \
--output txtx-supervisor-ui-dist.tar.gz \
"https://github.com/solana-foundation/txtx-supervisor-ui/releases/download/${SUPERVISOR_UI_TAG}/txtx-supervisor-ui-dist.tar.gz"

tar -xzf txtx-supervisor-ui-dist.tar.gz -C txtx/crates/txtx-supervisor-ui/supervisor-dist
rm -f txtx-supervisor-ui-dist.tar.gz

- name: Set up Rust
uses: dtolnay/rust-toolchain@stable

- name: Install Foundry
uses: foundry-rs/foundry-toolchain@v1

- name: Install cargo-binstall
run: curl -L --proto '=https' --tlsv1.2 -sSf https://raw.githubusercontent.com/cargo-bins/cargo-binstall/main/install-from-binstall-release.sh | bash

- name: Install tq
run: cargo binstall -y tomlq

- name: Cache Cargo registry and index
uses: actions/cache@v3
with:
Expand All @@ -51,63 +47,77 @@ jobs:
key: cargo-${{ runner.os }}-${{ hashFiles('**/Cargo.lock') }}
restore-keys: cargo-${{ runner.os }}-

- name: Login to crates.io
if: github.event_name == 'push'
run: cargo login ${{ secrets.CRATES_API_TOKEN }}

- name: Write resolved versions to file
run: |
- name: Detect bumped publishable crates
id: detect
run: |
cd txtx
jq -r '.packages[] | select(.source == null) | "\(.name) \(.version)"' < <(cargo metadata --format-version=1) > resolved_versions.txt
extract_version() {
awk '
/^\[package\]/ { in_package = 1; next }
/^\[/ { in_package = 0 }
in_package && $1 == "version" {
gsub(/"/, "", $3)
print $3
exit
}
'
}

mapfile -t publishable_crates < <(
cargo metadata --format-version=1 --no-deps \
| jq -r '
.workspace_root as $root
| .packages[]
| select(.manifest_path | startswith($root))
| select((.publish // null) != [])
| "\(.name):\(.manifest_path | ltrimstr($root + "/"))"
'
)

bumped_packages=()
base_sha="${{ github.event.before }}"

for entry in "${publishable_crates[@]}"; do
package_name="${entry%%:*}"
manifest="${entry#*:}"
current_version="$(extract_version < "$manifest")"
previous_version=""

if [ -n "$base_sha" ] && [ "$base_sha" != "0000000000000000000000000000000000000000" ] && git cat-file -e "$base_sha:$manifest" 2>/dev/null; then
previous_version="$(git show "$base_sha:$manifest" | extract_version)"
fi

if [ "$current_version" != "$previous_version" ]; then
bumped_packages+=("$package_name")
fi
done

exclude_args=()
for entry in "${publishable_crates[@]}"; do
package_name="${entry%%:*}"
if [[ ! " ${bumped_packages[*]} " =~ " ${package_name} " ]]; then
exclude_args+=(--exclude "$package_name")
fi
done

- name: Publish Crates
run: |
cd txtx
for manifest in crates/txtx-addon-kit/Cargo.toml crates/txtx-core/Cargo.toml crates/txtx-gql/Cargo.toml crates/txtx-cloud/Cargo.toml crates/txtx-supervisor-ui/Cargo.toml addons/evm/Cargo.toml addons/svm/types/Cargo.toml addons/svm/core/Cargo.toml; do
if [ -f "$manifest" ]; then
echo "Checking $manifest for changes..."

CRATE_NAME=$(tq -f "$manifest" .package.name | sed 's/"//g') # remove quotes around package name
VERSION=$(tq -f "$manifest" .package.version)


if cargo search -q "$CRATE_NAME" | grep "$VERSION"; then
echo "$CRATE_NAME ($manifest) is already published with version $VERSION, skipping..."
continue
fi

# Resolve dependencies
while IFS= read -r dep; do
DEP_NAME=$(echo "$dep" | awk '{print $1}')
RESOLVED_VERSION=$(echo "$dep" | awk '{print $2}')

# Check if resolved version exists on crates.io
if cargo search -q "$DEP_NAME" --limit 1 | grep -q "$RESOLVED_VERSION"; then
FINAL_VERSION="$RESOLVED_VERSION"
else
# Get the latest published version from crates.io
FINAL_VERSION=$(cargo search -q "$DEP_NAME" | grep -Eo '[0-9]+\.[0-9]+\.[0-9]+' | head -1)
echo "Resolved version $RESOLVED_VERSION for $DEP_NAME is not published. Using latest published version $FINAL_VERSION instead."
fi

# Replace workspace dependencies with the determined version
sed -i "s|${DEP_NAME} = { workspace = true }|${DEP_NAME} = \"$FINAL_VERSION\"|" "$manifest"
sed -i "s|${DEP_NAME} = { workspace = true, default-features = false }|${DEP_NAME} = \"$FINAL_VERSION\"|" "$manifest"
sed -i "s|${DEP_NAME} = { path = \"../types\" }|${DEP_NAME} = \"$FINAL_VERSION\"|" "$manifest"

done < resolved_versions.txt

echo "Publishing $CRATE_NAME from $manifest..."
if [ "${{ github.event_name }}" = "pull_request" ]; then
cargo publish --package $CRATE_NAME --dry-run --allow-dirty
else
cargo publish --package $CRATE_NAME --allow-dirty
fi
{
echo "bumped_count=${#bumped_packages[@]}"
if [ "${#bumped_packages[@]}" -gt 0 ]; then
echo "has_bumped=true"
echo "bumped_packages=${bumped_packages[*]}"
echo "exclude_args=${exclude_args[*]}"
else
echo "Skipping $manifest, Cargo.toml not found."
echo "has_bumped=false"
echo "bumped_packages="
echo "exclude_args="
fi
done
env:
CRATES_API_TOKEN: ${{ secrets.CRATES_API_TOKEN }}
} >> "$GITHUB_OUTPUT"

- name: Publish Crates
if: steps.detect.outputs.has_bumped == 'true'
env:
CARGO_REGISTRY_TOKEN: ${{ secrets.CRATES_API_TOKEN }}
run: |
cd txtx
echo "Bumped crates: ${{ steps.detect.outputs.bumped_packages }}"
cargo publish --workspace --allow-dirty --locked ${{ steps.detect.outputs.exclude_args }}
Loading
Loading