Compress wasm files for upload #62
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Build | |
on: | |
push: | |
branches: [main] | |
pull_request: | |
branches: [main] | |
env: | |
RAILS_MASTER_KEY: ${{ secrets.RAILS_MASTER_KEY }} | |
jobs: | |
test: | |
runs-on: ubuntu-latest | |
env: | |
RAILS_ENV: test | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
# Add or replace dependency steps here | |
- name: Install Ruby and gems | |
uses: ruby/setup-ruby@v1 | |
with: | |
bundler-cache: true | |
# Add or replace database setup steps here | |
- name: Set up database schema | |
run: bin/rails db:schema:load | |
# Add or replace test runners here | |
- name: Run tests | |
run: bin/rake | |
lint: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Install Ruby and gems | |
uses: ruby/setup-ruby@v1 | |
with: | |
bundler-cache: true | |
# Add or replace any other lints here | |
# - name: Security audit dependencies | |
# run: bin/bundler-audit --update | |
# - name: Security audit application code | |
# run: bin/brakeman -q -w2 | |
- name: Lint Ruby files | |
run: bin/rubocop --parallel | |
build-wasm-node: | |
needs: [test, lint] | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Install build tools from apt | |
run: sudo apt-get install ruby bison make autoconf git curl build-essential libyaml-dev zlib1g-dev -y | |
- name: Setup `wasmtime` | |
uses: bytecodealliance/actions/wasmtime/setup@v1 | |
- name: Workaround for Debian ruby distribution | |
run: | | |
# avoid using system rubygems while installing docs | |
# related issue: https://github.com/rubygems/rubygems/issues/3831 | |
sudo rm -rf /usr/lib/ruby/vendor_ruby/rubygems/defaults | |
- uses: ruby/setup-ruby@v1 | |
with: | |
bundler-cache: true | |
- name: Cache wasm node build | |
id: cache-wasm-node | |
uses: actions/cache@v4 | |
env: | |
cache-name: cache-wasm-node | |
with: | |
path: | | |
build | |
rubies | |
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('Gemfile.lock') }} | |
restore-keys: | | |
${{ runner.os }}-build-${{ env.cache-name }}- | |
${{ runner.os }}-build- | |
${{ runner.os }}- | |
- name: Compile assets | |
run: SECRET_KEY_BASE_DUMMY=1 RAILS_ENV=production bin/rails assets:precompile | |
- name: Build rails wasm for node | |
run: bin/build-wasm-node | |
- name: Test rails wasm for node successful with wasmtime | |
run: bin/test-wasm-node | |
build-wasm-web: | |
needs: [test, lint] | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Install build tools from apt | |
run: sudo apt-get install ruby bison make autoconf git curl build-essential libyaml-dev zlib1g-dev -y | |
- name: Workaround for Debian ruby distribution | |
run: | | |
# avoid using system rubygems while installing docs | |
# related issue: https://github.com/rubygems/rubygems/issues/3831 | |
sudo rm -rf /usr/lib/ruby/vendor_ruby/rubygems/defaults | |
- uses: ruby/setup-ruby@v1 | |
with: | |
bundler-cache: true | |
- name: Cache wasm web | |
id: cache-wasm-web | |
uses: actions/cache@v4 | |
env: | |
cache-name: cache-wasm-web | |
with: | |
path: | | |
build | |
rubies | |
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('Gemfile.lock') }} | |
restore-keys: | | |
${{ runner.os }}-build-${{ env.cache-name }}- | |
${{ runner.os }}-build- | |
${{ runner.os }}- | |
- name: Compile assets | |
run: SECRET_KEY_BASE_DUMMY=1 RAILS_ENV=production bin/rails assets:precompile | |
- name: Build rails wasm for web | |
run: bin/build-wasm-web | |
- run: ls -lahR .wasm | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: .wasm | |
path: .wasm/*.wasm | |
retention-days: 1 | |
upload-wasm-web: | |
needs: [test, lint, build-wasm-node, build-wasm-web] | |
runs-on: ubuntu-latest | |
steps: | |
- run: sudo apt-get install brotli -y | |
- uses: actions/checkout@v4 | |
- uses: ruby/setup-ruby@v1 | |
with: | |
bundler-cache: true | |
- uses: actions/download-artifact@v4 | |
- run: ls -lahR .wasm | |
- name: Brotli compress the wasm files | |
run: brotli .wasm/*.wasm | |
- name: Upload wasm to cloud storage | |
run: | | |
if [[ "${{github.ref}}" == "refs/heads/main" ]]; then | |
SECRET_KEY_BASE_DUMMY=1 \ | |
RAILS_ENV=production \ | |
bin/rails wasm:upload | |
else | |
RAILS_ENV=test \ | |
bin/rails wasm:upload | |
fi |