Skip to content

Build reform

Build reform #8898

Workflow file for this run

name: CI
on:
push:
branches:
- main
- beta
- release
# release branches
- release*
- lts*
# nightly ci cron branches
- cron*
tags:
- 'v*'
paths-ignore:
- 'CHANGELOG.md'
pull_request:
permissions:
contents: read
jobs:
lint:
name: Linting
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: ./.github/actions/setup
- name: linting
run: pnpm lint
types:
name: Type Checking (current version)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: ./.github/actions/setup
- name: Check published and internal types
run: pnpm type-check
types-range:
name: Type Checking (other supported versions)
runs-on: ubuntu-latest
needs: ['types']
strategy:
matrix:
# I removed 'next' from this list because we're seeing buggy behavior in
# the so-far unreleased 5.4. -ef4
ts-version: ['4.9', '5.0', '5.1', '5.2', '5.3']
steps:
- uses: actions/checkout@v3
- uses: ./.github/actions/setup
- name: build stable type definitions
run: pnpm build:types
- name: install TS@${{matrix.ts-version}}
run: pnpm add --save-dev --workspace-root typescript@${{ matrix.ts-version }}
- name: Check published and internal types with TS@${{matrix.ts-version}}
run: pnpm type-check
basic-test:
name: Basic Test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: ./.github/actions/setup
- name: build
run: pnpm vite build --mode=development
- name: Upload build
uses: actions/upload-artifact@v3
with:
name: dist
path: dist
- name: test
run: pnpm test
variant-tests:
name: ${{ matrix.name }}
runs-on: ubuntu-latest
needs: [basic-test, lint, types]
strategy:
matrix:
include:
- name: "All deprecations enabled"
ALL_DEPRECATIONS_ENABLED: "true"
- name: "All deprecations enabled, with optional features"
ALL_DEPRECATIONS_ENABLED: "true"
ENABLE_OPTIONAL_FEATURES: "true"
- name: "Deprecations as errors"
OVERRIDE_DEPRECATION_VERSION: "15.0.0"
- name: "Deprecations as errors, with optional features"
OVERRIDE_DEPRECATION_VERSION: "15.0.0"
ENABLE_OPTIONAL_FEATURES: "true"
- name: "Production build"
BUILD: "production"
- name: "Production build, with optional features"
BUILD: "production"
ENABLE_OPTIONAL_FEATURES: "true"
- name: "Extend prototypes"
EXTEND_PROTOTYPES: "true"
- name: "Extend prototypes, with optional features"
EXTEND_PROTOTYPES: "true"
ENABLE_OPTIONAL_FEATURES: "true"
- name: "Prebuilt"
PREBUILT: "true"
steps:
- uses: actions/checkout@v3
- uses: ./.github/actions/setup
- name: build
run: pnpm vite build --mode=${{ matrix.BUILD || 'development' }}
- name: test
env:
ALL_DEPRECATIONS_ENABLED: ${{ matrix.ALL_DEPRECATIONS_ENABLED }}
OVERRIDE_DEPRECATION_VERSION: ${{ matrix.OVERRIDE_DEPRECATION_VERSION }}
EXTEND_PROTOTYPES: ${{ matrix.EXTEND_PROTOTYPES }}
ENABLE_OPTIONAL_FEATURES: ${{ matrix.ENABLE_OPTIONAL_FEATURES }}
PREBUIlT: ${{ matrix.PREBUILT }}
run: pnpm test
browserstack-test:
name: Browserstack Tests (Safari, Edge)
runs-on: ubuntu-latest
needs: [basic-test, lint, types]
steps:
- uses: actions/checkout@v3
- uses: ./.github/actions/setup
- name: build
env:
ALL_SUPPORTED_BROWSERS: true
run: pnpm vite build --mode=development
- name: Set BrowserStack Local Identifier
if: startsWith(github.ref, 'refs/tags/v')
run: |
BROWSERSTACK_LOCAL_IDENTIFIER="$GITHUB_RUN_ID-$GITHUB_RUN_ATTEMPT"
echo "BROWSERSTACK_LOCAL_IDENTIFIER=$BROWSERSTACK_LOCAL_IDENTIFIER" >> $GITHUB_ENV
- name: test:browserstack
env:
BROWSERSTACK_USERNAME: emberjscoreteam1
# This is in plaintext on purpose. It has no privileged access to anything (this is a free
# account) and it allows us to run browserstack tests against PRs.
BROWSERSTACK_ACCESS_KEY: o5LNEdygq1SP4L9kst4s
run: pnpm test:browserstack
smoke-test:
name: Smoke tests (Full Ember Apps)
runs-on: ubuntu-latest
needs: [basic-test, lint, types]
steps:
- uses: actions/checkout@v3
- uses: ./.github/actions/setup
- name: build
run: pnpm build
- name: test
# todo: potentially more apps? use matrix?
run: |
cd smoke-tests/ember-test-app/
pnpm install
pnpm test
node-test:
name: Node.js Tests
runs-on: ubuntu-latest
needs: [basic-test, lint, types]
steps:
- uses: actions/checkout@v3
- uses: ./.github/actions/setup
- name: build
env:
SHOULD_TRANSPILE_FOR_NODE: true
run: pnpm build
- name: test
run: pnpm test:node
blueprint-test:
name: Blueprint Tests
runs-on: ubuntu-latest
needs: [lint]
steps:
- uses: actions/checkout@v3
- uses: ./.github/actions/setup
- name: test
run: pnpm test:blueprints
browser-test:
name: Browser Tests (Firefox)
runs-on: ubuntu-latest
needs: [basic-test, lint, types]
steps:
- uses: actions/checkout@v3
- uses: ./.github/actions/setup
- uses: actions/download-artifact@v3
with:
name: dist
path: dist
- name: Setup firefox
uses: browser-actions/setup-firefox@latest
with:
firefox-version: 102.0.1
- run: firefox --version
- name: test
run: pnpm ember test --path dist -c testem.ci-browsers.js
deploy-tag:
name: Deploy tags to npm
runs-on: ubuntu-latest
needs:
[
basic-test,
lint,
variant-tests,
browserstack-test,
node-test,
blueprint-test,
browser-test,
]
if: startsWith(github.ref, 'refs/tags/v')
steps:
- uses: actions/checkout@v3
- uses: ./.github/actions/setup
- name: build for publish
run: node bin/build-for-publishing.js
- name: publish to npm
run: npm publish
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_AUTH_TOKEN }}
publish:
name: Publish channel to s3
runs-on: ubuntu-latest
needs:
[
basic-test,
lint,
variant-tests,
browserstack-test,
node-test,
blueprint-test,
browser-test,
]
# Only run on pushes to branches that are not from the cron workflow
if: github.event_name == 'push' && contains(github.ref, 'cron') != true
steps:
- uses: actions/checkout@v3
- uses: ./.github/actions/setup
- name: build for publish
run: node bin/build-for-publishing.js
- name: publish to s3
run: node bin/publish-to-s3.mjs
env:
S3_BUCKET_NAME: 'builds.emberjs.com'
S3_SECRET_ACCESS_KEY: ${{ secrets.S3_SECRET_ACCESS_KEY}}
S3_ACCESS_KEY_ID: ${{ secrets.S3_ACCESS_KEY_ID}}
publish-alpha:
name: Publish alpha from default branch
runs-on: ubuntu-latest
needs:
[
basic-test,
lint,
variant-tests,
browserstack-test,
node-test,
blueprint-test,
browser-test,
]
# Only run on pushes to main
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
steps:
- uses: actions/checkout@v3
- uses: ./.github/actions/setup
- name: build for publish
run: node bin/build-for-publishing.js
- name: publish to s3
run: node bin/publish-to-s3.mjs
env:
BUILD_TYPE: alpha
OVERRIDE_FEATURES: ''
S3_BUCKET_NAME: 'builds.emberjs.com'
S3_SECRET_ACCESS_KEY: ${{ secrets.S3_SECRET_ACCESS_KEY}}
S3_ACCESS_KEY_ID: ${{ secrets.S3_ACCESS_KEY_ID}}
notify:
name: Notify Discord
runs-on: ubuntu-latest
needs:
[
basic-test,
lint,
variant-tests,
browserstack-test,
node-test,
blueprint-test,
browser-test,
]
if: failure() && contains(github.ref, 'cron') == true
steps:
- uses: sarisia/actions-status-discord@v1
with:
webhook: ${{ secrets.FRAMEWORK_WEBHOOK }}
status: 'Failure'
title: 'Ember.js Nightly CI'
color: 0xcc0000
url: '${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}'
username: GitHub Actions