Web3dev version #2
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: CI/CD | |
on: | |
push: | |
branches: | |
- main | |
pull_request: | |
branches: | |
- main | |
jobs: | |
RSpec: | |
runs-on: ubuntu-latest | |
timeout-minutes: 15 | |
env: | |
COVERAGE: true | |
RAILS_ENV: test | |
KNAPSACK_PRO_CI_NODE_TOTAL: ${{ matrix.ci_node_total }} | |
KNAPSACK_PRO_CI_NODE_INDEX: ${{ matrix.ci_node_index }} | |
KNAPSACK_PRO_TEST_SUITE_TOKEN_RSPEC: ${{ secrets.KNAPSACK_PRO_TEST_SUITE_TOKEN_RSPEC }} | |
KNAPSACK_PRO_FIXED_QUEUE_SPLIT: true | |
DATABASE_URL_TEST: postgres://postgres:postgres@localhost:5432/Forem_test | |
DATABASE_NAME_TEST: Forem_test | |
services: | |
postgres: | |
image: postgres:13-alpine | |
env: | |
POSTGRES_PASSWORD: postgres | |
ports: | |
- 5432:5432 | |
redis: | |
image: redis | |
ports: | |
- 6379:6379 | |
strategy: | |
fail-fast: false | |
matrix: | |
ci_node_total: [9] | |
ci_node_index: [0, 1, 2, 3, 4, 5, 6, 7, 8] | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Cache node modules | |
uses: actions/cache@v3 | |
with: | |
path: node_modules | |
key: ${{ runner.os }}-node-modules-${{ hashFiles('**/yarn.lock') }} | |
restore-keys: ${{ runner.os }}-node-modules- | |
- uses: actions/setup-node@v3 | |
with: | |
node-version: 16 | |
cache: yarn | |
- run: yarn install --frozen-lockfile | |
- name: setup ruby | |
uses: ruby/setup-ruby@v1 | |
with: | |
bundler-cache: true | |
- run: bundle exec rails db:test:prepare | |
- name: RSpec | |
run: bin/knapsack_pro_rspec | |
- name: Upload RSpec artifacts | |
uses: actions/upload-artifact@v3 | |
if: failure() | |
with: | |
name: rspec-artifacts | |
path: | | |
tmp/capybara | |
- uses: codecov/codecov-action@v3 | |
with: | |
flags: ruby | |
- name: Upload test results to BuildPulse for flaky test detection | |
if: '!cancelled()' # Run this step even when the tests fail. Skip if the workflow is cancelled. | |
uses: Workshop64/buildpulse-action@master | |
with: | |
account: ${{ secrets.BUILDPULSE_ACCOUNT }} | |
repository: ${{ secrets.BUILDPULSE_REPOSITORY }} | |
path: tmp/rspec_final_results.xml | |
key: ${{ secrets.BUILDPULSE_ACCESS_KEY_ID }} | |
secret: ${{ secrets.BUILDPULSE_SECRET_ACCESS_KEY }} | |
Jest: | |
runs-on: ubuntu-latest | |
timeout-minutes: 15 | |
env: | |
RAILS_ENV: test | |
NODE_ENV: test | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Cache node modules | |
uses: actions/cache@v3 | |
with: | |
path: node_modules | |
key: ${{ runner.os }}-node-modules-${{ hashFiles('**/yarn.lock') }} | |
restore-keys: ${{ runner.os }}-node-modules- | |
- uses: actions/setup-node@v3 | |
with: | |
node-version: 16 | |
cache: yarn | |
- run: yarn install --frozen-lockfile | |
- run: yarn lint:frontend | |
- run: yarn test --colors --ci --reporters=jest-junit | |
- name: Upload test results to BuildPulse for flaky test detection | |
if: '!cancelled()' # Run this step even when the tests fail. Skip if the workflow is cancelled. | |
uses: Workshop64/buildpulse-action@master | |
with: | |
account: ${{ secrets.BUILDPULSE_ACCOUNT }} | |
repository: ${{ secrets.BUILDPULSE_REPOSITORY }} | |
path: junit.xml | |
key: ${{ secrets.BUILDPULSE_ACCESS_KEY_ID }} | |
secret: ${{ secrets.BUILDPULSE_SECRET_ACCESS_KEY }} | |
- uses: codecov/codecov-action@v3 | |
with: | |
flags: javascript | |
- run: yarn build-storybook | |
Build-test: | |
runs-on: ubuntu-latest | |
timeout-minutes: 15 | |
env: | |
RAILS_ENV: test | |
DATABASE_URL: postgres://postgres:postgres@localhost:5432/Forem_prod_test | |
DATABASE_NAME: Forem_prod_test | |
APP_PROTOCOL: http:// | |
APP_DOMAIN: localhost:3000 | |
HEROKU_APP_URL: practicaldev.herokuapp.com | |
SECRET_KEY_BASE: dummydummydummy | |
GITHUB_KEY: dummy | |
GITHUB_SECRET: dummy | |
KNAPSACK_PRO_FIXED_QUEUE_SPLIT: true | |
services: | |
postgres: | |
image: postgres:13-alpine | |
env: | |
POSTGRES_PASSWORD: postgres | |
ports: | |
- 5432:5432 | |
redis: | |
image: redis | |
ports: | |
- 6379:6379 | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Cache node modules | |
uses: actions/cache@v3 | |
with: | |
path: node_modules | |
key: ${{ runner.os }}-node-modules-${{ hashFiles('**/yarn.lock') }} | |
restore-keys: ${{ runner.os }}-node-modules- | |
- uses: actions/setup-node@v3 | |
with: | |
node-version: 16 | |
cache: yarn | |
- run: yarn install --frozen-lockfile | |
- name: setup ruby | |
uses: ruby/setup-ruby@v1 | |
with: | |
bundler-cache: true | |
- run: bundle exec rails assets:precompile | |
- run: yarn run postcss | |
- run: bin/test-console-check | |
Cypress: | |
runs-on: ubuntu-latest | |
timeout-minutes: 15 | |
env: | |
RAILS_ENV: test | |
DATABASE_URL_TEST: postgres://postgres:postgres@localhost:5432/Forem_test | |
DATABASE_NAME_TEST: Forem_test | |
KNAPSACK_PRO_FIXED_QUEUE_SPLIT: true | |
services: | |
postgres: | |
image: postgres:13-alpine | |
env: | |
POSTGRES_PASSWORD: postgres | |
ports: | |
- 5432:5432 | |
redis: | |
image: redis | |
ports: | |
- 6379:6379 | |
strategy: | |
fail-fast: false | |
matrix: | |
ci_node_total: [9] | |
ci_node_index: [0, 1, 2, 3, 4, 5, 6, 7, 8, non-seed] | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Cache node modules | |
uses: actions/cache@v3 | |
with: | |
path: node_modules | |
key: ${{ runner.os }}-node-modules-${{ hashFiles('**/yarn.lock') }} | |
restore-keys: ${{ runner.os }}-node-modules- | |
- uses: actions/setup-node@v3 | |
with: | |
node-version: 16 | |
cache: yarn | |
- run: yarn install --frozen-lockfile | |
- name: setup ruby | |
uses: ruby/setup-ruby@v1 | |
with: | |
bundler-cache: true | |
- run: bundle exec rails db:test:prepare assets:precompile | |
- run: yarn cypress install | |
- name: cypress | |
env: | |
KNAPSACK_PRO_CI_NODE_TOTAL: ${{ matrix.ci_node_total }} | |
KNAPSACK_PRO_CI_NODE_INDEX: ${{ matrix.ci_node_index }} | |
KNAPSACK_PRO_TEST_SUITE_TOKEN_CYPRESS: ${{ secrets.KNAPSACK_PRO_TEST_SUITE_TOKEN_CYPRESS }} | |
KNAPSACK_PRO_TEST_FILE_PATTERN: "cypress/e2e/seededFlows/**/*.spec.js" | |
run: bin/knapsack_pro_cypress | |
if: ${{ matrix.ci_node_index != 'non-seed' }} | |
- name: cypress non-seed | |
run: CREATOR_ONBOARDING_SEED_DATA=1 E2E_FOLDER=creatorOnboardingFlows E2E=true bin/rails cypress:run | |
if: ${{ matrix.ci_node_index == 'non-seed' }} | |
- name: Upload Cypress artifacts | |
uses: actions/upload-artifact@v3 | |
if: failure() | |
with: | |
name: cypress-artifacts | |
path: | | |
tmp/cypress_screenshots | |
cypress/logs | |
- name: Upload test results to BuildPulse for flaky test detection | |
if: '!cancelled()' # Run this step even when the tests fail. Skip if the workflow is cancelled. | |
uses: Workshop64/buildpulse-action@master | |
with: | |
account: ${{ secrets.BUILDPULSE_ACCOUNT }} | |
repository: ${{ secrets.BUILDPULSE_REPOSITORY }} | |
path: cypress/results | |
key: ${{ secrets.BUILDPULSE_ACCESS_KEY_ID }} | |
secret: ${{ secrets.BUILDPULSE_SECRET_ACCESS_KEY }} | |
CI-status-report: | |
runs-on: ubuntu-latest | |
needs: [rspec, jest, cypress, build-test] | |
if: always() | |
steps: | |
- name: Decide whether the needed jobs succeeded or failed | |
uses: re-actors/alls-green@release/v1 | |
with: | |
jobs: ${{ toJSON(needs) }} | |
- name: Report failure to Slack channel | |
uses: slackapi/slack-github-action@v1 | |
with: | |
payload: | | |
{ "link": "${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}" } | |
env: | |
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} | |
if: failure() && github.ref == 'refs/heads/main' | |
Deploy: | |
if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }} | |
runs-on: ubuntu-latest | |
needs: [CI-status-report] | |
concurrency: ${{ matrix.environment }} | |
environment: ${{ matrix.environment }} | |
strategy: | |
matrix: | |
environment: [ production, staging ] | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: akhileshns/heroku-deploy@v3.12.12 | |
with: | |
heroku_api_key: ${{ secrets.HEROKU_API_KEY }} | |
heroku_app_name: ${{ secrets.HEROKU_APP_NAME }} | |
heroku_email: ${{ secrets.HEROKU_EMAIL }} |