name: Version and release on: push: branches: - main permissions: contents: write pull-requests: write concurrency: ${{ github.workflow }}-${{ github.ref }} env: CI: true NODE_VERSION: 20 jobs: setup: name: ๐Ÿ—๏ธ Scaffold env runs-on: ubuntu-latest steps: - name: ๐Ÿƒโ€โ™‚๏ธ Checkout Repo uses: actions/checkout@v4 - name: ๐Ÿ”จ Setup pnpm uses: pnpm/action-setup@v4 with: run_install: false - name: ๐Ÿงจ Setup Node ${{ env.NODE_VERSION }} uses: actions/setup-node@v4 with: node-version: ${{ env.NODE_VERSION }} cache: 'pnpm' - name: ๐Ÿ’พ Cache dependencies uses: actions/cache@v4 id: cache with: path: | ~/.pnpm-store ./node_modules key: pnpm-${{ runner.os }}-${{ hashFiles('pnpm-lock.yaml') }} restore-keys: | pnpm-${{ runner.os }}- - name: ๐Ÿ’ฅ Install deps if: steps.cache.outputs.cache-hit != 'true' run: pnpm install # todo: It would be nice to abstract these so they arent duplicated lint: name: Lint ๐Ÿ”Ž runs-on: ubuntu-latest needs: setup steps: - name: ๐Ÿƒโ€โ™‚๏ธ Checkout Repo uses: actions/checkout@v4 - name: ๐Ÿ”จ Setup pnpm uses: pnpm/action-setup@v4 with: run_install: false - name: ๐Ÿงจ Setup Node ${{ env.NODE_VERSION }} uses: actions/setup-node@v4 with: node-version: ${{ env.NODE_VERSION }} cache: 'pnpm' - name: ๐Ÿ’พ Cache dependencies uses: actions/cache@v4 id: cache with: path: | ~/.pnpm-store ./node_modules key: pnpm-${{ runner.os }}-${{ hashFiles('pnpm-lock.yaml') }} restore-keys: | pnpm-${{ runner.os }}- - name: ๐Ÿ’ฅ Init pnpm dependencies if: steps.cache.outputs.cache-hit != 'true' run: pnpm install - name: ๐Ÿ”Ž Lint codebase run: pnpm lint test: name: Test ๐Ÿงช runs-on: ubuntu-latest needs: setup steps: - name: ๐Ÿƒโ€โ™‚๏ธ Checkout Repo uses: actions/checkout@v4 - name: ๐Ÿ”จ Setup pnpm uses: pnpm/action-setup@v4 with: run_install: false - name: ๐Ÿงจ Setup Node ${{ env.NODE_VERSION }} uses: actions/setup-node@v4 with: node-version: ${{ env.NODE_VERSION }} cache: 'pnpm' - name: ๐Ÿ’พ Cache dependencies uses: actions/cache@v4 id: cache with: path: | ~/.pnpm-store ./node_modules key: pnpm-${{ runner.os }}-${{ hashFiles('pnpm-lock.yaml') }} restore-keys: | pnpm-${{ runner.os }}- - name: ๐Ÿ’ฅ Init pnpm dependencies if: steps.cache.outputs.cache-hit != 'true' run: pnpm install - name: ๐Ÿงช Test codebase run: pnpm test compile: name: Compile โš’๏ธ runs-on: ubuntu-latest needs: setup steps: - name: ๐Ÿƒโ€โ™‚๏ธ Checkout Repo uses: actions/checkout@v4 - name: ๐Ÿ”จ Setup pnpm uses: pnpm/action-setup@v4 with: run_install: false - name: ๐Ÿงจ Setup Node ${{ env.NODE_VERSION }} uses: actions/setup-node@v4 with: node-version: ${{ env.NODE_VERSION }} cache: 'pnpm' - name: ๐Ÿ’พ Cache dependencies uses: actions/cache@v4 id: cache with: path: | ~/.pnpm-store ./node_modules key: pnpm-${{ runner.os }}-${{ hashFiles('pnpm-lock.yaml') }} restore-keys: | pnpm-${{ runner.os }}- - name: ๐Ÿ’ฅ Init pnpm dependencies if: steps.cache.outputs.cache-hit != 'true' run: pnpm install - name: โš’๏ธ Compile run: pnpm build release: name: Release @bengsfort/stdlib ๐Ÿš€ runs-on: ubuntu-latest needs: [setup, lint, test, compile] steps: - name: ๐Ÿƒโ€โ™‚๏ธ Checkout Repo uses: actions/checkout@v4 - name: ๐Ÿ”จ Setup pnpm uses: pnpm/action-setup@v4 with: run_install: false - name: ๐Ÿงจ Setup Node ${{ env.NODE_VERSION }} uses: actions/setup-node@v4 with: node-version: ${{ env.NODE_VERSION }} cache: 'pnpm' - name: ๐Ÿ’พ Cache dependencies uses: actions/cache@v4 id: cache with: path: | ~/.pnpm-store ./node_modules key: pnpm-${{ runner.os }}-${{ hashFiles('pnpm-lock.yaml') }} restore-keys: | pnpm-${{ runner.os }}- - name: ๐Ÿ’ฅ Init pnpm dependencies if: steps.cache.outputs.cache-hit != 'true' run: pnpm install # Note: This runs the prepublishOnly, which is gonna duplicate the compile # step. Should try to figure out a way to avoid this, but it is what it is - name: ๐Ÿš€ Create and publish new version uses: changesets/action@v1 with: version: pnpm changes:commit commit: "chore: Update package version" title: "chore: Update package version" publish: pnpm ci:publish createGithubReleases: true env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} NPM_TOKEN: ${{ secrets.NPM_TOKEN }}