From f86387ddcfbb45c043f3457e3aa960aa3f879355 Mon Sep 17 00:00:00 2001 From: Jen Jones Arnesen Date: Tue, 6 Jun 2023 11:15:30 +0200 Subject: [PATCH] feat: update gh workflows and set version to 100.0.0 (#2367) BREAKING CHANGE: version will be bumped to v100.0.0, which is the base version for app-hub core apps. The workflows are now updated so that PRs run against 2.40, and the nightly build runs against dev. --- .github/workflows/dhis2-verify-app.yml | 174 ++++++++++++++++++++ .github/workflows/nightly.yml | 78 +++++++++ .github/workflows/verify.yml | 211 ------------------------- 3 files changed, 252 insertions(+), 211 deletions(-) create mode 100644 .github/workflows/dhis2-verify-app.yml create mode 100644 .github/workflows/nightly.yml delete mode 100644 .github/workflows/verify.yml diff --git a/.github/workflows/dhis2-verify-app.yml b/.github/workflows/dhis2-verify-app.yml new file mode 100644 index 000000000..1a9445328 --- /dev/null +++ b/.github/workflows/dhis2-verify-app.yml @@ -0,0 +1,174 @@ +name: 'dhis2: verify (app)' + +on: + pull_request: + types: ['opened', 'edited', 'reopened', 'synchronize'] + push: + branches: + - 'master' + - 'dev' + +env: + GIT_AUTHOR_NAME: '@dhis2-bot' + GIT_AUTHOR_EMAIL: 'apps@dhis2.org' + GIT_COMMITTER_NAME: '@dhis2-bot' + GIT_COMMITTER_EMAIL: 'apps@dhis2.org' + GH_TOKEN: ${{secrets.DHIS2_BOT_GITHUB_TOKEN}} + CI: true + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: 18.x + + - name: Install + run: yarn install --frozen-lockfile + + - name: Build + run: yarn d2-app-scripts build + + - uses: actions/upload-artifact@v3 + with: + name: app-build + path: | + **/build + !**/node_modules + retention-days: 1 + + lint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: 18.x + + - name: Install + run: yarn install --frozen-lockfile + + - name: Generate translations + run: yarn d2-app-scripts i18n generate + + - name: Lint + run: yarn d2-style check + + test: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: 18.x + + - name: Install + run: yarn install --frozen-lockfile + + - name: Generate translations + run: yarn d2-app-scripts i18n generate + + - name: Test + run: yarn d2-app-scripts test + + e2e-prod: + runs-on: ubuntu-latest + needs: test + if: "!contains(github.event.head_commit.message, '[skip ci]')" + + strategy: + matrix: + containers: [1, 2, 3, 4] + + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: 18.x + + - uses: actions/cache@v2 + id: yarn-cache + with: + path: '**/node_modules' + key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} + + - name: Install Cypress binary + run: yarn cypress install + + - name: End-to-End tests + uses: cypress-io/github-action@v2 + with: + record: true + parallel: true + start: ${{ env.SERVER_START_CMD }} + wait-on: ${{ env.SERVER_URL }} + wait-on-timeout: 300 + cache-key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} + group: 'e2e' + tag: ${{ github.event_name }} + env: + CI: true + CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }} + COMMIT_INFO_MESSAGE: ${{ github.event.pull_request.title }} + SERVER_START_CMD: 'yarn cypress:start' + SERVER_URL: 'http://localhost:3000' + cypress_dhis2_api_stub_mode: 'DISABLED' + REACT_APP_DHIS2_BASE_URL: ${{ secrets.CYPRESS_DHIS2_BASE_URL_40 }} + cypress_dhis2_base_url: ${{ secrets.CYPRESS_DHIS2_BASE_URL_40}} + cypress_dhis2_username: ${{ secrets.CYPRESS_DHIS2_USERNAME }} + cypress_dhis2_password: ${{ secrets.CYPRESS_DHIS2_PASSWORD }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + release: + runs-on: ubuntu-latest + needs: e2e-prod + if: | + !github.event.push.repository.fork && + github.actor != 'dependabot[bot]' && + github.ref == 'refs/heads/master' + steps: + - uses: actions/checkout@v3 + with: + token: ${{ secrets.DHIS2_BOT_GITHUB_TOKEN }} + + - uses: actions/setup-node@v3 + with: + node-version: 18.x + + - uses: actions/download-artifact@v3 + with: + name: app-build + + - name: Install + run: yarn install --frozen-lockfile + + - uses: dhis2/action-semantic-release@master + with: + publish-apphub: true + publish-github: true + github-token: ${{ secrets.DHIS2_BOT_GITHUB_TOKEN }} + apphub-token: ${{ secrets.DHIS2_BOT_APPHUB_TOKEN }} + + - uses: dhis2/deploy-build@master + with: + build-dir: build/app + github-token: ${{ secrets.DHIS2_BOT_GITHUB_TOKEN }} + + report-release-failure: + runs-on: ubuntu-latest + needs: release + if: | + failure() && + !cancelled() && + github.ref == 'refs/heads/master' + steps: + - name: Send failure message to analytics-internal-bot slack channel + id: slack + uses: slackapi/slack-github-action@v1.23.0 + with: + channel-id: ${{ secrets.SLACK_CHANNEL_ID }} + slack-message: ':small_red_triangle_down: :dashboard-app: Dashboard-app release ' + env: + SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }} diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml new file mode 100644 index 000000000..013c6fcb4 --- /dev/null +++ b/.github/workflows/nightly.yml @@ -0,0 +1,78 @@ +name: 'dhis2: nightly' + +# This workflow runs the e2e tests on the default branch against dev at 5:10am M-F + +on: + schedule: + - cron: '10 5 * * 1-5' + +concurrency: + group: ${{ github.workflow}}-${{ github.ref }} + cancel-in-progress: true + +defaults: + run: + shell: bash + +jobs: + e2e-dev: + runs-on: ubuntu-latest + + strategy: + matrix: + containers: [1, 2, 3, 4] + + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: 18.x + + - uses: actions/cache@v2 + id: yarn-cache + with: + path: '**/node_modules' + key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} + + - name: Install Cypress binary + run: yarn cypress install + + - name: End-to-End tests + uses: cypress-io/github-action@v2 + with: + record: true + parallel: true + start: ${{ env.SERVER_START_CMD }} + wait-on: ${{ env.SERVER_URL }} + wait-on-timeout: 300 + cache-key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} + group: 'e2e' + tag: ${{ github.event_name }} + env: + CI: true + CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }} + COMMIT_INFO_MESSAGE: ${{ github.event.pull_request.title }} + SERVER_START_CMD: 'yarn cypress:start' + SERVER_URL: 'http://localhost:3000' + cypress_dhis2_api_stub_mode: 'DISABLED' + REACT_APP_DHIS2_BASE_URL: ${{ secrets.CYPRESS_DHIS2_BASE_URL_DEV }} + cypress_dhis2_base_url: ${{ secrets.CYPRESS_DHIS2_BASE_URL_DEV}} + cypress_dhis2_username: ${{ secrets.CYPRESS_DHIS2_USERNAME }} + cypress_dhis2_password: ${{ secrets.CYPRESS_DHIS2_PASSWORD }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + send-slack-message: + runs-on: ubuntu-latest + needs: e2e-dev + if: | + failure() && + !cancelled() + steps: + - name: Send failure message to analytics-internal-kfmt slack channel + id: slack + uses: slackapi/slack-github-action@v1.23.0 + with: + channel-id: ${{ secrets.SLACK_CHANNEL_ID }} + slack-message: ':dashboard-app: Dashboard-app e2e nightly run ' + env: + SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }} diff --git a/.github/workflows/verify.yml b/.github/workflows/verify.yml deleted file mode 100644 index e38199297..000000000 --- a/.github/workflows/verify.yml +++ /dev/null @@ -1,211 +0,0 @@ -name: 'dhis2: verify (app)' - -on: push - -env: - GIT_AUTHOR_NAME: '@dhis2-bot' - GIT_AUTHOR_EMAIL: 'apps@dhis2.org' - GIT_COMMITTER_NAME: '@dhis2-bot' - GIT_COMMITTER_EMAIL: 'apps@dhis2.org' - GH_TOKEN: ${{secrets.DHIS2_BOT_GITHUB_TOKEN}} - CI: true - D2_VERBOSE: true - -jobs: - install: - runs-on: ubuntu-latest - if: "!contains(github.event.head_commit.message, '[skip ci]')" - - steps: - - uses: actions/checkout@v2 - - uses: actions/setup-node@v1 - with: - node-version: 14.x - - - uses: actions/cache@v2 - id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`) - with: - path: '**/node_modules' - key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} - - - name: Install - if: steps.yarn-cache.outputs.cache-hit != 'true' - run: yarn install --frozen-lockfile - - build: - runs-on: ubuntu-latest - needs: install - if: "!contains(github.event.head_commit.message, '[skip ci]')" - steps: - - uses: actions/checkout@v2 - - uses: actions/setup-node@v1 - with: - node-version: 14.x - - - uses: actions/cache@v2 - id: yarn-cache - with: - path: '**/node_modules' - key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} - - - name: Build - run: yarn build - - - uses: actions/upload-artifact@v2 - with: - name: app-build - path: | - **/build - !**/node_modules - retention-days: 1 - - lint: - runs-on: ubuntu-latest - needs: install - if: "!contains(github.event.head_commit.message, '[skip ci]')" - steps: - - uses: actions/checkout@v2 - - uses: actions/setup-node@v1 - with: - node-version: 14.x - - - uses: actions/cache@v2 - id: yarn-cache - with: - path: '**/node_modules' - key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} - - - name: Build - run: yarn build - - - name: Lint - run: yarn lint - - test: - runs-on: ubuntu-latest - needs: install - if: "!contains(github.event.head_commit.message, '[skip ci]')" - steps: - - uses: actions/checkout@v2 - - uses: actions/setup-node@v1 - with: - node-version: 14.x - - - uses: actions/cache@v2 - id: yarn-cache - with: - path: '**/node_modules' - key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} - - # Can be removed if translations aren't required for tests, or if not using the App Platform - - name: Generate translations - run: yarn d2-app-scripts i18n generate - - - name: Test - run: yarn test - - e2e: - runs-on: ubuntu-latest - needs: install - if: "!contains(github.event.head_commit.message, '[skip ci]')" - - strategy: - matrix: - containers: [1, 2] - - steps: - - name: Checkout - uses: actions/checkout@v2 - - - uses: actions/setup-node@v1 - with: - node-version: 14.x - - - uses: actions/cache@v2 - id: yarn-cache - with: - path: '**/node_modules' - key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} - - - name: Install Cypress binary - run: yarn cypress install - - - name: End-to-End tests - uses: cypress-io/github-action@v2 - with: - record: true - parallel: true - start: ${{ env.SERVER_START_CMD }} - wait-on: ${{ env.SERVER_URL }} - wait-on-timeout: 300 - cache-key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} - group: 'e2e' - tag: ${{ github.event_name }} - env: - CI: true - CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }} - COMMIT_INFO_MESSAGE: ${{ github.event.pull_request.title }} - SERVER_START_CMD: 'yarn cypress:start' - SERVER_URL: 'http://localhost:3000' - cypress_dhis2_api_stub_mode: 'DISABLED' - REACT_APP_DHIS2_BASE_URL: ${{ secrets.CYPRESS_DHIS2_BASE_URL }} - cypress_dhis2_base_url: ${{ secrets.CYPRESS_DHIS2_BASE_URL }} - cypress_dhis2_username: ${{ secrets.CYPRESS_DHIS2_USERNAME }} - cypress_dhis2_password: ${{ secrets.CYPRESS_DHIS2_PASSWORD }} - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - publish: - runs-on: ubuntu-latest - needs: [build, lint, test, e2e] - if: "!contains(github.event.head_commit.message, '[skip ci]')" - steps: - - uses: actions/checkout@v2 - with: - token: ${{env.GH_TOKEN}} - - - uses: actions/setup-node@v1 - with: - node-version: 14.x - - - uses: actions/download-artifact@v2 - with: - name: app-build - - - uses: dhis2/deploy-build@master - with: - build-dir: build/app - github-token: ${{ env.GH_TOKEN }} - - release: - runs-on: ubuntu-latest - needs: [publish] - if: "github.event_name == 'push' && !contains(github.event.head_commit.message, '[skip ci]')" - steps: - - uses: actions/checkout@v2 - with: - token: ${{env.GH_TOKEN}} - - - uses: actions/setup-node@v1 - with: - node-version: 14.x - - - name: Publish release to GitHub - run: npx @dhis2/cli-utils release - - report-failure-to-slack: - runs-on: ubuntu-latest - needs: [build, lint, test, e2e, publish, release] - if: | - always() && - github.ref == 'refs/heads/master' && - contains(needs.*.result, 'failure') - - steps: - - name: Send failure message to analytics-internal-bot slack channel - id: slack - uses: slackapi/slack-github-action@v1.23.0 - with: - channel-id: ${{ secrets.SLACK_CHANNEL_ID }} - slack-message: ':small_red_triangle_down: Dashboard-app build ' - env: - SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}