name: release # Build the plugin cdylib for each desktop platform and attach the binaries # (plus plugin.toml) to a GitHub Release on a v* tag. Open CAD Studio's Plugin # Manager reads the assets, picks the one matching the user's OS/arch, and # installs it. Rename the `asset:` files to your plugin id. on: push: tags: ["v*"] permissions: contents: write jobs: build: strategy: fail-fast: false matrix: include: - os: ubuntu-latest ext: so asset: opencad.my_plugin-linux-x86_64.so - os: windows-latest ext: dll asset: opencad.my_plugin-windows-x86_64.dll - os: macos-latest ext: dylib asset: opencad.my_plugin-macos-aarch64.dylib runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 # NOTE: @stable floats to whatever's current when this job runs, which # is NOT the same thing as "matches the host's rustc exactly" — the API # v4+ load check compares plugin.toml's rustc_version to the host's # build-time compiler byte-for-byte (see plugin-architecture.md's # "Build-time ABI metadata"). Pin this to the host's actual toolchain # version (check crates/ocs_plugin_api/src/version_info.rs's embedded # value, or the host's own CI config) before a real release, or your # binary may be refused at load with a version-mismatch error. - uses: dtolnay/rust-toolchain@stable - run: cargo build --release - name: Stage release asset shell: bash run: | mkdir -p dist cp target/release/*.${{ matrix.ext }} "dist/${{ matrix.asset }}" acadrust_source=$(grep -A3 '^name = "opencadcodec"' Cargo.lock | grep '^source' | head -1 | sed 's/^source = "//;s/"$//') sed \ -e "s|__RUSTC_VERSION__|$(rustc --version)|" \ -e "s|__ACADRUST_SOURCE__|$acadrust_source|" \ plugin.toml > dist/plugin.toml - uses: softprops/action-gh-release@v2 with: files: | dist/${{ matrix.asset }} dist/plugin.toml