Skip to content

test: use sync test where we don't use await #308

test: use sync test where we don't use await

test: use sync test where we don't use await #308

Workflow file for this run

name: Build
on:
push:
branches:
- "**"
pull_request:
branches: [main]
types: [opened, reopened, synchronize]
pull_request_target:
types: [opened, reopened, synchronize]
permissions:
contents: read
jobs:
check_if_build:
name: Check if Build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 1000
- id: check
run: |
chmod +x .github/scripts/check_if_build.sh
.github/scripts/check_if_build.sh
outputs:
check_if_build: ${{ steps.check.outputs.check_if_build }}
test_cf:
name: Run Tests (WASM)
if: (github.event_name == 'pull_request') || (github.event_name == 'push' && github.ref == 'refs/heads/main')
runs-on: ubuntu-latest
defaults:
run:
working-directory: ./cloudflare
steps:
- uses: actions/checkout@v4
- name: Install Rust
uses: actions-rs/toolchain@v1
with:
toolchain: stable
override: true
- name: Add wasm32 target
run: rustup target add wasm32-unknown-unknown
- name: Install Node.js
uses: actions/setup-node@v4
with:
node-version: "20.11.0"
- name: Package Install
run: npm install
- name: Test CF
run: npm test
test:
name: Run Tests
if: (github.event_name == 'pull_request') || (github.event_name == 'push' && github.ref == 'refs/heads/main')
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: taiki-e/install-action@cargo-llvm-cov
- name: Install Stable Toolchain
uses: actions-rs/toolchain@v1
with:
toolchain: stable
default: true
- name: Cache Rust Dependencies
uses: actions/cache@v4
with:
path: |
~/.cargo/registry
~/.cargo/git
target
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
restore-keys: ${{ runner.os }}-cargo-
- name: Run Cargo Test
uses: actions-rs/cargo@v1
with:
command: llvm-cov
args: --all-features --lcov --output-path lcov.info
- name: Upload Coverage to Codecov
uses: codecov/codecov-action@v4
with:
token: ${{ secrets.CODECOV_TOKEN }} # not required for public repos
files: lcov.info
fail_ci_if_error: true
format:
name: Run Formatter and Lint Check
if: (github.event_name == 'pull_request') || (github.event_name == 'push' && github.ref == 'refs/heads/main')
runs-on: ubuntu-latest
steps:
- name: Install Node.js
uses: actions/setup-node@v4
with:
node-version: "20.11.0"
- name: Install Prettier
run: npm install --global prettier
- name: Install Nightly Toolchain
uses: actions-rs/toolchain@v1
with:
toolchain: nightly
components: rustfmt, clippy
- name: Cache Rust Dependencies
uses: actions/cache@v4
with:
path: |
~/.cargo/registry
~/.cargo/git
target
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
- uses: actions/checkout@v4
- name: Run Lint Script
run: ./lint.sh --mode=check
draft_release:
name: Draft Release
if: (github.event_name == 'pull_request_target') || (github.event_name == 'push' && github.ref == 'refs/heads/main')
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write
steps:
- name: Checkout Current Branch (Fast)
uses: actions/checkout@v4
- id: create_release
uses: release-drafter/release-drafter@v6
if: (github.event_name == 'pull_request_target') || (github.event_name == 'push' && github.ref == 'refs/heads/main')
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
config-name: release-drafter.yml
- name: Set Output for Later Jobs
id: set_output
run: |
echo "create_release_name=${{ steps.create_release.outputs.name }}" >> $GITHUB_OUTPUT
echo "create_release_id=${{ steps.create_release.outputs.id }}" >> $GITHUB_OUTPUT
outputs:
create_release_name: ${{ steps.set_output.outputs.create_release_name }}
create_release_id: ${{ steps.set_output.outputs.create_release_id }}
release:
name: Release
needs: [test, format, draft_release, check_if_build, test_cf]
if: github.event_name == 'push' && github.ref == 'refs/heads/main' && (needs.check_if_build.outputs.check_if_build == 'true')
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
build:
[
linux-x64-gnu,
linux-x64-musl,
linux-arm64-gnu,
linux-arm64-musl,
linux-ia32-gnu,
darwin-arm64,
darwin-x64,
win32-x64-msvc,
win32-x64-gnu,
win32-arm64-msvc,
win32-ia32-gnu,
]
include:
- build: linux-x64-gnu
os: ubuntu-latest
rust: stable
target: x86_64-unknown-linux-gnu
libc: glibc
cross: false
- build: linux-x64-musl
os: ubuntu-latest
rust: stable
target: x86_64-unknown-linux-musl
features: --no-default-features --features cli
libc: musl
cross: true
- build: linux-arm64-gnu
os: ubuntu-latest
rust: stable
target: aarch64-unknown-linux-gnu
libc: glibc
cross: true
- build: linux-arm64-musl
os: ubuntu-latest
rust: stable
target: aarch64-unknown-linux-musl
features: --no-default-features --features cli
libc: musl
cross: true
- build: linux-ia32-gnu
os: ubuntu-latest
rust: stable
target: i686-unknown-linux-gnu
features: --no-default-features --features cli
libc: glibc
cross: true
- build: darwin-arm64
os: macos-latest
rust: stable
target: aarch64-apple-darwin
- build: darwin-x64
os: macos-latest
rust: stable
target: x86_64-apple-darwin
cross: false
- build: win32-x64-msvc
os: windows-latest
rust: stable
target: x86_64-pc-windows-msvc
libc: msvc
ext: ".exe"
- build: win32-x64-gnu
os: windows-latest
rust: stable
target: x86_64-pc-windows-gnu
features: --no-default-features --features cli
libc: glibc
ext: ".exe"
- build: win32-arm64-msvc
os: windows-latest
rust: stable
target: aarch64-pc-windows-msvc
features: --no-default-features --features cli
libc: msvc
ext: ".exe"
- build: win32-ia32-gnu
os: ubuntu-latest
rust: stable
target: i686-pc-windows-gnu
features: --no-default-features --features cli
cross: true
libc: glibc
ext: ".exe"
permissions:
contents: write
pull-requests: write
env:
GITHUB_TOKEN: ${{secrets.GITHUBTOKEN}}
APP_VERSION: ${{ needs.draft_release.outputs.create_release_name }}
steps:
- name: Checkout Current Branch (Fast)
uses: actions/checkout@v4
- name: Install Correct Toolchain
uses: dtolnay/rust-toolchain@stable
with:
toolchain: ${{ matrix.rust }}
targets: ${{ matrix.target }}
- name: Build
env:
APP_VERSION: ${{ needs.draft_release.outputs.create_release_name}}
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
uses: actions-rs/cargo@v1
with:
use-cross: ${{ matrix.cross }}
command: build
args: ${{matrix.features}} --release --target ${{ matrix.target }}
- name: Install Node.js
if: (startsWith(github.event.head_commit.message, 'feat') || startsWith(github.event.head_commit.message, 'fix')) && (github.event_name == 'push' && github.ref == 'refs/heads/main')
uses: actions/setup-node@v4
with:
node-version: 20.11.0
registry-url: https://registry.npmjs.org
- name: Install dependencies
if: (startsWith(github.event.head_commit.message, 'feat') || startsWith(github.event.head_commit.message, 'fix')) && (github.event_name == 'push' && github.ref == 'refs/heads/main')
run: |
cd npm
npm install
- name: Run generate.js script
if: (startsWith(github.event.head_commit.message, 'feat') || startsWith(github.event.head_commit.message, 'fix')) && (github.event_name == 'push' && github.ref == 'refs/heads/main')
run: |
cd npm
npm run gen -- --target ${{matrix.target}} --version ${{ env.APP_VERSION }} --build ${{matrix.build}} --ext ${{ matrix.ext || '' }} --libc ${{ matrix.libc }}
- name: Setup .npmrc file to publish to npm
run: echo "//registry.npmjs.org/:_authToken=$NODE_AUTH_TOKEN" > ~/.npmrc
- name: NPM Publish
if: (startsWith(github.event.head_commit.message, 'feat') || startsWith(github.event.head_commit.message, 'fix')) && (github.event_name == 'push' && github.ref == 'refs/heads/main')
uses: JS-DevTools/npm-publish@v3
with:
token: ${{ secrets.NPM_TOKEN }}
package: npm/@tailcallhq/core-${{matrix.build}}
access: public
- name: Rename Binary with Target Name
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
run: |
pwd
cp target/${{ matrix.target }}/release/tailcall${{ matrix.ext }} target/${{ matrix.target }}/release/tailcall-${{ matrix.target }}${{ matrix.ext }}
- name: Upload ${{ matrix.target }} Binary
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
uses: xresloader/upload-to-github-release@v1
with:
release_id: ${{ needs.draft_release.outputs.create_release_id }}
file: target/${{ matrix.target }}/release/tailcall-${{ matrix.target }}${{ matrix.ext }}
overwrite: true
semantic_release:
name: Semantic Release
if: (startsWith(github.event.head_commit.message, 'feat') || startsWith(github.event.head_commit.message, 'fix')) && (github.event_name == 'push' && github.ref == 'refs/heads/main')
needs: [draft_release, release]
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
APP_VERSION: ${{needs.draft_release.outputs.create_release_name }}
steps:
- name: Publish Release
uses: test-room-7/action-publish-release-drafts@v0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
tag-name: ${{needs.draft_release.outputs.create_release_name }}
publish_npm_root:
name: Publish NPM main package
needs: [draft_release, release]
if: (startsWith(github.event.head_commit.message, 'feat') || startsWith(github.event.head_commit.message, 'fix')) && (github.event_name == 'push' && github.ref == 'refs/heads/main')
runs-on: ubuntu-latest
steps:
- name: Checkout Current Branch (Fast)
uses: actions/checkout@v4
- name: Install Node
uses: actions/setup-node@v4
with:
node-version: 20.11.0
registry-url: https://registry.npmjs.org
- name: Install dependencies
run: |
cd npm
npm install
- name: Run generate-root.js script
env:
APP_VERSION: ${{needs.draft_release.outputs.create_release_name }}
run: |
cd npm
npm run gen-root -- --version ${{ env.APP_VERSION }}
- name: Setup .npmrc file to publish to npm
run: echo "//registry.npmjs.org/:_authToken=$NODE_AUTH_TOKEN" > ~/.npmrc
- name: Publish packages
uses: JS-DevTools/npm-publish@v3
with:
token: ${{ secrets.NPM_TOKEN }}
package: npm/@tailcallhq/tailcall
access: public
env:
APP_VERSION: ${{needs.draft_release.outputs.create_release_name }}
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
build-and-push-image:
env:
REGISTRY: ghcr.io
IMAGE_NAME: ${{ github.repository }}/tc-server
needs: [draft_release, release]
if: (startsWith(github.event.head_commit.message, 'feat') || startsWith(github.event.head_commit.message, 'fix')) && (github.event_name == 'push' && github.ref == 'refs/heads/main')
runs-on: ubuntu-latest
# Sets the permissions granted to the `GITHUB_TOKEN` for the actions in this job.
permissions:
contents: read
packages: write
#
steps:
- name: Checkout Repository
uses: actions/checkout@v4
# Uses the `docker/login-action` action to log in to the Container registry registry using the account and password that will publish the packages. Once published, the packages are scoped to the account defined here.
- name: Log in to the Container Registry
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUBTOKEN }}
# This step uses [docker/metadata-action](https://github.com/docker/metadata-action#about) to extract tags and labels that will be applied to the specified image. The `id` "meta" allows the output of this step to be referenced in a subsequent step. The `images` value provides the base name for the tags and labels.
- name: Extract Metadata (tags, labels) for Docker
id: meta
uses: docker/metadata-action@v5
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
# This step uses the `docker/build-push-action` action to build the image, based on your repository's `Dockerfile`. If the build succeeds, it pushes the image to GitHub Packages.
# It uses the `context` parameter to define the build's context as the set of files located in the specified path. For more information, see "[Usage](https://github.com/docker/build-push-action#usage)" in the README of the `docker/build-push-action` repository.
# It uses the `tags` and `labels` parameters to tag and label the image with the output from the "meta" step.
- name: Build and Push the Docker Image
uses: docker/build-push-action@v5
with:
context: .
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
homebrew-release:
name: Homebrew Release
needs: [draft_release, release, semantic_release]
if: (startsWith(github.event.head_commit.message, 'feat') || startsWith(github.event.head_commit.message, 'fix')) && (github.event_name == 'push' && github.ref == 'refs/heads/main')
permissions:
contents: write
pull-requests: write
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
repository: tailcallhq/homebrew-tailcall
ref: main
token: ${{ secrets.HOMEBREW_ACCESS }}
- name: Update Homebrew Formula
run: ./update-formula.sh ${{needs.draft_release.outputs.create_release_name }}