Skip to content

feat: allow calling methods on null when self is of an optional type #2238

feat: allow calling methods on null when self is of an optional type

feat: allow calling methods on null when self is of an optional type #2238

Workflow file for this run

name: Tact CI
env:
HUSKY: 0
on:
pull_request:
branches: ["**"]
workflow_dispatch:
jobs:
backwards-compat:
strategy:
fail-fast: false
matrix:
node-version: [18]
os: [ubuntu-latest, windows-latest, macos-latest]
runs-on: ${{ matrix.os }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
# without caching
- name: Backwards compatibility tests
run: |
# Temporarily ignore engines
yarn config set ignore-engines true
# Install dependencies, gen and build the compiler
yarn install
yarn clean
yarn gen
yarn build
# Test some specific things for backwards compatibility.
# It's important to restrain from using too much of Node.js 22+ features
# until it goes into maintenance LTS state and majority of users catches up
yarn jest -t 'isSubsetOf'
# Clean-up
yarn cleanall
yarn config delete ignore-engines
forward-compat:
strategy:
fail-fast: false
matrix:
node-version: [23]
os: [ubuntu-latest, windows-latest, macos-latest]
runs-on: ${{ matrix.os }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
# without caching
- name: Forward compatibility tests
run: |
# Install dependencies and perform some steps of the build pipeline,
# skipping the contract generation and the final `yarn build` step
yarn install
yarn gen:grammar
yarn gen:stdlib
yarn gen:func-js
# Clean-up
yarn cleanall
test:
strategy:
fail-fast: false
matrix:
node-version: [22]
os: [ubuntu-latest, windows-latest, macos-latest]
runs-on: ${{ matrix.os }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
cache: "yarn"
- name: Install dependencies
run: |
corepack enable
yarn install
- name: List installed packages
run: |
yarn list
- name: Print some environment info
run: |
yarn cross-env echo $NODE_ENV
- name: Build Tact compiler
run: |
yarn clean
yarn gen
yarn build
- name: Check there are no errors to be fixed in package.json and no uncommitted changes
run: |
npm pkg fix && git diff --exit-code
- name: Test Tact compiler
run: |
yarn coverage
- name: Check there are no errors reported by ESLint
run: |
yarn lint
- name: Check formatting with Prettier
run: |
yarn fmt:check
- name: Spellcheck code base
run: |
yarn spell
- name: Check there are no unused dependencies
run: |
yarn knip
- name: Check broken file references in internal documentation
if: runner.os == 'Linux'
uses: lycheeverse/lychee-action@v2
with:
args: "-n -s file --exclude-path node_modules --exclude-path docs './**/*.md'"
output: "/dev/stdout"
fail: true
failIfEmpty: false
- name: Show an example .pkg file on Windows
if: runner.os == 'Windows'
run: |
type examples\output\echo_Echo.pkg
- name: Link Tact yarn package
run: |
yarn link
- name: Test compatibility with tact-template
run: |
git clone https://github.com/tact-lang/tact-template.git
cd tact-template
yarn install
yarn link @tact-lang/compiler
yarn build
yarn test
test-blueprint:
strategy:
fail-fast: false
matrix:
node-version: [22]
os: [ubuntu-latest, windows-latest, macos-latest]
package-manager: [npm, yarn, pnpm, bun]
# follow-up ifs are for ensuring clean state at all times
runs-on: ${{ matrix.os }}
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Setup Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
cache: "yarn" # dependency caching only
- uses: oven-sh/setup-bun@v2
if: ${{ matrix.package-manager == 'bun' }}
- name: Prepare Tact compiler
run: |
# There are issues with corepack + it disallows the use of pnpm for linkage later on
# It's only useful for making sure that Tact compiler developers use the same version of Yarn
# https://github.com/nodejs/corepack/issues/112
# corepack enable
yarn install
yarn clean
yarn gen
yarn build
- name: (npm) Test creation of new Blueprint projects
if: ${{ matrix.package-manager == 'npm' }}
run: |
npm link
# for end-users 'npm create ton@latest' works fine even in PowerShell,
# but it fails on Windows in GitHub Actions because of weird -- expansion
npx create-ton@latest test-project --type tact-counter --contractName Counter
cd test-project
npm link @tact-lang/compiler
npm run build
npm run test
- name: (npm) Test Tact and Blueprint installs in existing projects
if: ${{ matrix.package-manager == 'npm' }}
run: |
# Out of the box, only npm experiences issues
# with lifecycle scripts of installed dependencies
mkdir npm-test && cd npm-test
npm init -y
npm i ../ # installing compiler relatively
npm i @ton/blueprint
- name: (yarn) Test creation of new Blueprint projects
if: ${{ matrix.package-manager == 'yarn' }}
run: |
yarn link
yarn create ton test-project --type tact-counter --contractName Counter
cd test-project
yarn link @tact-lang/compiler
yarn build
yarn test
- name: (pnpm) Test creation of new Blueprint projects
if: ${{ matrix.package-manager == 'pnpm' }}
run: |
# Installing the specific pnpm version to work around https://github.com/pnpm/pnpm/issues/5000
# and not fail suddenly when a release comes that fixes this
# NOTE: revisit and simplify this step if/when those bugs with pnpm are resolved
npm i -g pnpm@9.12.2
# To help pnpm recognize the shell (they cannot do it themselves sometimes...)
${{ matrix.os != 'windows-latest' && 'export SHELL=bash' || 'echo windows_noop' }}
pnpm setup -f
# To source .bashrc on Linux:
${{ matrix.os == 'ubuntu-latest' && 'source ~/.bashrc' || 'echo noop' }}
# To expose stuff for pnpm directly on macOS (because otherwise the pre-installed Node.js version gets used):
${{ matrix.os == 'macos-latest' && 'export PNPM_HOME=~/Library/pnpm; export PATH=$PNPM_HOME:$PATH' || 'echo noop' }}
pnpm link -g
cd ..
pnpm create ton@latest test-project --type tact-counter --contractName Counter
cd test-project
pnpm link -g @tact-lang/compiler
pnpm build
pnpm test
- name: (bun) Test creation of new Blueprint projects
if: ${{ matrix.package-manager == 'bun' }}
run: |
bun link
bun create ton@latest test-project --type tact-counter --contractName Counter
cd test-project
bun link @tact-lang/compiler
bun run build # without 'run' Bun will use its own bundler
bun run test # without 'run' Bun will use its own test runner