From 30cc1e6a8ccddbb683bdefaef8984ba67d8ef423 Mon Sep 17 00:00:00 2001 From: John Detter Date: Wed, 23 Oct 2024 23:36:06 -0500 Subject: [PATCH] Fail on dirty bindings --- .../workflows/unity-testsuite-bindings.yml | 79 +++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 .github/workflows/unity-testsuite-bindings.yml diff --git a/.github/workflows/unity-testsuite-bindings.yml b/.github/workflows/unity-testsuite-bindings.yml new file mode 100644 index 00000000..ef946f53 --- /dev/null +++ b/.github/workflows/unity-testsuite-bindings.yml @@ -0,0 +1,79 @@ +name: Unity Test Suite + +on: + push: + branches: + - staging + pull_request: + +jobs: + test: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v3 + + # Grab the branch name from the PR description. If it's not found, master will be used instead. + - name: Extract SpacetimeDB branch name or PR link from PR description + id: extract-branch + if: github.event_name == 'pull_request' + run: | + description=$(curl -s -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ + ${{ github.event.pull_request.url }} | jq -r '.body') + + # Check if description contains a branch name or a PR link + branch_or_pr=$(echo "$description" | grep -oP '(?<=SpacetimeDB branch name:\s).+') + echo "Branch or PR found: $branch_or_pr" + + if [[ -z "$branch_or_pr" ]]; then + branch="master" + elif [[ "$branch_or_pr" =~ ^https://github.com/.*/pull/[0-9]+$ ]]; then + # If it's a PR link, extract the branch name from the PR + pr_number=$(echo "$branch_or_pr" | grep -oP '[0-9]+$') + branch=$(curl -s -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ + https://api.github.com/repos/clockworklabs/SpacetimeDB/pulls/$pr_number | jq -r '.head.ref') + else + # It's already a branch name + branch="$branch_or_pr" + fi + + echo "branch=$branch" >> $GITHUB_OUTPUT + echo "Final branch name: $branch" + - name: Install Rust toolchain + run: | + curl https://sh.rustup.rs -sSf | sh -s -- -y + source $HOME/.cargo/env + rustup install stable + rustup default stable + + - name: Install SpacetimeDB CLI from specific branch + run: | + cd unity-tests~ + git clone https://github.com/clockworklabs/SpacetimeDB.git + cd SpacetimeDB + # Sanitize the branch name by trimming any newlines or spaces + branch_name=$(echo "${{ steps.extract-branch.outputs.branch }}" | tr -d '[:space:]') + # If the branch name is not found, default to master + if [ -z "$branch_name" ]; then + branch_name="master" + fi + git checkout "$branch_name" + echo "Checked out branch: $branch_name" + cargo build --release -p spacetimedb-cli + sudo mv target/release/spacetime /usr/bin/spacetime + + - name: Generate client bindings + run: | + cd unity-tests~/server + bash ./generate.sh -y + + - name: Check for changes + run: | + git diff --exit-code + continue-on-error: true + + - name: Fail if there are changes + if: ${{ steps.check-for-changes.outcome == 'failure' }} + run: | + echo "Error: Bindings are dirty. Please generate bindings again and commit them to this branch." + exit 1