123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222 |
- name: Test different bundlers with Uppy
- on:
- push:
- branches: [main]
- pull_request:
- # We want all branches so we configure types to be the GH default again
- types: [opened, synchronize, reopened]
- paths-ignore:
- - '**.md'
- - '**.d.ts'
- - 'examples/**'
- - 'private/**'
- - 'website/**'
- - '.github/**'
- - '!.github/workflows/bundlers.yml'
- env:
- YARN_ENABLE_GLOBAL_CACHE: false
- jobs:
- isolate_uppy:
- name: Isolate Uppy packages
- runs-on: ubuntu-latest
- steps:
- - name: Checkout sources
- uses: actions/checkout@v4
- - name: Get yarn cache directory path
- id: yarn-cache-dir-path
- run:
- echo "dir=$(corepack yarn config get cacheFolder)" >> $GITHUB_OUTPUT
- - uses: actions/cache@v4
- id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
- with:
- path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
- key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
- restore-keys: |
- ${{ runner.os }}-yarn-
- - name: Install Node.js
- uses: actions/setup-node@v4
- with:
- node-version: lts/*
- - name: Install dependencies
- run:
- corepack yarn workspaces focus $(corepack yarn workspaces list --json
- | jq -r .name | awk '/^@uppy-example/{ next } { if ($0!="uppy.io")
- print $0 }')
- env:
- # https://docs.cypress.io/guides/references/advanced-installation#Skipping-installation
- CYPRESS_INSTALL_BINARY: 0
- - name: Build lib
- run: corepack yarn run build:lib
- - name: Make Uppy bundle use local version
- run: |
- node <<'EOF'
- const pkg = require('./packages/uppy/package.json');
- pkg.overrides = {};
- (async () => {
- for await (const { name } of await require('node:fs/promises').opendir('./packages/@uppy/')) {
- pkg.overrides["@uppy/" + name] = `/tmp/packages/@uppy-${name}-${{ github.sha }}.tgz`;
- }
- for(const key of Object.keys(pkg.dependencies)) {
- if (key in pkg.overrides) {
- pkg.dependencies[key] = pkg.overrides[key];
- }
- }
- require('node:fs').writeFileSync('./packages/uppy/package.json', JSON.stringify(pkg));
- })();
- EOF
- - name: Eject public packages from repo
- run:
- mkdir /tmp/artifacts && corepack yarn workspaces foreach --all
- --no-private pack --install-if-needed -o /tmp/artifacts/%s-${{
- github.sha }}.tgz
- - name: Upload artifact
- if: success()
- uses: actions/upload-artifact@v4
- with:
- name: packages
- path: /tmp/artifacts/
- rollup:
- needs: isolate_uppy
- name: Rollup
- runs-on: ubuntu-latest
- strategy:
- matrix:
- bundler-version: [latest]
- steps:
- - name: Download uppy tarball
- uses: actions/download-artifact@v4
- with:
- path: /tmp/
- - name: Extract tarball
- run:
- tar -xzf /tmp/packages/uppy-${{ github.sha }}.tgz --strip-components 1
- - name: Add Rollup as a dev dependency
- run: >-
- npm i --save-dev @rollup/plugin-commonjs @rollup/plugin-node-resolve
- rollup@${{matrix.bundler-version}}
- - run: npx rollup --version
- - name: Create Rollup config file
- run: >-
- echo ' import cjs from "@rollup/plugin-commonjs"; import { nodeResolve
- } from "@rollup/plugin-node-resolve";
- export default {
- input: "./lib/index.js",
- output: {
- file: "/dev/null",
- },
- plugins: [
- cjs(),
- nodeResolve({ browser: true, exportConditions: ["browser"] }),
- ],
- };' > rollup.config.mjs
- - name: Bundle
- run: npx rollup -c
- webpack:
- needs: isolate_uppy
- name: Webpack
- runs-on: ubuntu-latest
- strategy:
- matrix:
- bundler-version: [latest]
- steps:
- - name: Download uppy tarball
- uses: actions/download-artifact@v4
- with:
- path: /tmp/
- - name: Extract tarball
- run:
- tar -xzf /tmp/packages/uppy-${{ github.sha }}.tgz --strip-components 1
- - name: Add Webpack as a dev dependency
- run: npm i --save-dev webpack-cli webpack@${{matrix.bundler-version}}
- - run: npx webpack --version
- - name: Create Webpack config file
- run:
- echo 'export default
- {mode:"production",target:"web",entry:"./lib/index.js"}' >
- webpack.config.js
- - name: Bundle
- run: npx webpack
- parcel:
- needs: isolate_uppy
- name: Parcel
- runs-on: ubuntu-latest
- strategy:
- matrix:
- bundler-version: [latest]
- steps:
- - name: Download uppy tarball
- uses: actions/download-artifact@v4
- with:
- path: /tmp/
- - name: Extract tarball
- run:
- tar -xzf /tmp/packages/uppy-${{ github.sha }}.tgz --strip-components 1
- - name: Fix package.json to work with Parcel
- run: |
- node <<'EOF'
- const pkg = require('./package.json');
- delete pkg.main
- delete pkg.types
- pkg.module = 'output.mjs'
- require('node:fs').writeFileSync('./package.json', JSON.stringify(pkg));
- EOF
- - name: Add Parcel as a dev dependency
- run: npm i --save-dev parcel@${{matrix.bundler-version}}
- - run: npx parcel --version
- - name: Bundle
- run: npx parcel build lib/index.js
- vite:
- needs: isolate_uppy
- name: Vite
- runs-on: ubuntu-latest
- strategy:
- matrix:
- bundler-version: [latest]
- steps:
- - name: Download uppy tarball
- uses: actions/download-artifact@v4
- with:
- path: /tmp/
- - name: Extract tarball
- run:
- tar -xzf /tmp/packages/uppy-${{ github.sha }}.tgz --strip-components 1
- - name: Add Vite as a dev dependency
- run: npm i --save-dev vite@${{matrix.bundler-version}}
- - run: npx vite --version
- - name: Create index.html
- run:
- echo '<!doctype html><html><head><script type="module"
- src="./lib/index.js"></script></head></html>' > index.html
- - name: Bundle
- run: npx vite build
- esbuild:
- needs: isolate_uppy
- name: ESBuild
- runs-on: ubuntu-latest
- strategy:
- matrix:
- bundler-version: [latest]
- steps:
- - name: Download uppy tarball
- uses: actions/download-artifact@v4
- with:
- path: /tmp/
- - name: Extract tarball
- run:
- tar -xzf /tmp/packages/uppy-${{ github.sha }}.tgz --strip-components 1
- - name: Add ESBuild as a dev dependency
- run: npm i --save-dev esbuild@${{matrix.bundler-version}}
- - run: npx esbuild --version
- - name: Bundle
- run: npx esbuild lib/index.js --bundle --outfile=/dev/null
- # Browserify: doesn't support ESM.
|