Set GITHUB_OUTPUT var correctly in powershell (#3219) #12813
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: Frameworks | |
concurrency: | |
group: wf-${{github.event.pull_request.number || github.sha}}-${{github.workflow}} | |
cancel-in-progress: true | |
on: | |
pull_request: | |
push: | |
branches: | |
- "[0-9][0-9]_[0-9]" | |
workflow_dispatch: | |
schedule: | |
- cron: '0 */2 * * 6,0' | |
jobs: | |
build-devextreme: | |
runs-on: ubuntu-latest | |
name: Build DevExtreme | |
timeout-minutes: 20 | |
steps: | |
#Git | |
- name: Get sources | |
uses: actions/checkout@v3 | |
- name: Clone devextreme repo from PR author fork | |
continue-on-error: true | |
if: github.event_name == 'pull_request' | |
run: git clone -b ${{github.event.pull_request.head.ref}} --depth 1 https://github.com/${{github.event.pull_request.user.login}}/devextreme ./devextreme | |
- name: Clone devextreme repo | |
run: | | |
BASE_BRANCH=$(node -p -e "require('./package.json').version.slice(0, 4).replace('.', '_')") | |
test -d ./devextreme || git clone -b $BASE_BRANCH --depth 1 https://github.com/devexpress/devextreme ./devextreme | |
- name: Log devextreme top commit | |
working-directory: ./devextreme | |
run: git log -1 --oneline | |
#Build Devextreme | |
- name: Restore npm cache | |
uses: actions/cache@v3 | |
with: | |
path: 'devextreme/**/node_modules' | |
key: ${{ runner.os }}-devextreme-node-modules-${{ hashFiles('devextreme/**/package-lock.json') }} | |
- name: Use Node.js | |
uses: actions/setup-node@v3 | |
with: | |
node-version: '20' | |
- name: Install packages | |
working-directory: ./devextreme | |
run: npm install --no-audit --no-fund | |
- name: Build | |
working-directory: ./devextreme/packages/devextreme | |
run: npm run build-npm-devextreme | |
# Inject descriptions | |
# This is required for lint check for deprecated usages - some deprecated tags are generated during descriptions injection | |
- name: Clone devextreme-documentation repo | |
run: | | |
BASE_BRANCH=$(node -p -e "require('./package.json').version.slice(0, 4).replace('.', '_')") | |
test -d ./devextreme-documentation-repo || git clone -b $BASE_BRANCH https://github.com/devexpress/devextreme-documentation ./devextreme-documentation-repo | |
- name: Install packages to devextreme-documentation | |
working-directory: ./devextreme-documentation-repo | |
run: npm i | |
- name: Make Declarations.json | |
working-directory: ./devextreme | |
run: npm run tools:discover-declarations | |
- name: Make Descriptions.json | |
working-directory: ./devextreme-documentation-repo | |
run: npm run update-topics -- --artifacts ../devextreme/artifacts/internal-tools | |
- name: Inject descriptions | |
working-directory: ./devextreme | |
run: npm run devextreme:inject-descriptions | |
# Pack | |
- name: Pack devextreme | |
working-directory: ./devextreme/packages/devextreme/artifacts/npm/devextreme | |
run: npm pack | |
- name: Pack devextreme-dist | |
working-directory: ./devextreme/packages/devextreme/artifacts/npm/devextreme-dist | |
run: npm pack | |
- name: Pack devextreme-angular | |
working-directory: ./devextreme/packages/devextreme-angular | |
run: npm run pack | |
- name: Pack devextreme-react | |
working-directory: ./devextreme/packages/devextreme-react | |
run: npm run pack | |
- name: Pack devextreme-vue | |
working-directory: ./devextreme/packages/devextreme-vue | |
run: npm run pack | |
- name: Copy packages | |
run: | | |
cp ./devextreme/packages/devextreme/artifacts/npm/devextreme/*.tgz ./devextreme-installer.tgz | |
cp ./devextreme/packages/devextreme/artifacts/npm/devextreme-dist/*.tgz ./devextreme-dist-installer.tgz | |
cp ./devextreme/packages/devextreme-angular/npm/dist/*.tgz ./devextreme-angular-installer.tgz | |
cp ./devextreme/packages/devextreme-react/npm/*.tgz ./devextreme-react-installer.tgz | |
cp ./devextreme/packages/devextreme-vue/npm/*.tgz ./devextreme-vue-installer.tgz | |
- name: Copy build artifacts | |
uses: actions/upload-artifact@v3 | |
with: | |
name: devextreme-sources | |
path: | | |
devextreme-installer.tgz | |
devextreme-dist-installer.tgz | |
devextreme-angular-installer.tgz | |
devextreme-react-installer.tgz | |
devextreme-vue-installer.tgz | |
retention-days: 1 | |
build-demos: | |
runs-on: ubuntu-latest | |
name: Build Demos | |
timeout-minutes: 20 | |
needs: build-devextreme | |
steps: | |
- name: Get sources | |
uses: actions/checkout@v3 | |
- name: Use Node.js | |
uses: actions/setup-node@v3 | |
with: | |
node-version: '20' | |
- name: Download devextreme sources | |
uses: actions/download-artifact@v3 | |
with: | |
name: devextreme-sources | |
- name: Restore npm cache | |
uses: actions/cache@v3 | |
with: | |
path: ./node_modules | |
key: ${{ runner.os }}-node-modules-${{ hashFiles('package-lock.json') }} | |
- name: Delete DX packages | |
run: sed -i '/23.2-next/d' ./package.json | |
- name: Install packages | |
run: npm install --no-audit --no-fund | |
- name: Install package | |
run: | | |
npm install devextreme-installer.tgz | |
npm install devextreme-dist-installer.tgz | |
npm install devextreme-react-installer.tgz | |
npm install devextreme-vue-installer.tgz | |
npm install devextreme-angular-installer.tgz | |
- name: Prepare bundles | |
run: npm run prepare-bundles | |
- name: Demos - Run tsc | |
run: tsc --noEmit | |
#Publish artifacts | |
- name: Zip node_modules | |
run: 7z a -t7z -mx3 -mmt2 node_modules.7z node_modules | |
- name: Copy build artifacts | |
uses: actions/upload-artifact@v3 | |
with: | |
name: devextreme-sources | |
path: | | |
node_modules.7z | |
bundles/ | |
retention-days: 1 | |
lint: | |
name: ${{ matrix.name }} | |
needs: build-devextreme | |
runs-on: ubuntu-latest | |
timeout-minutes: 60 | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- name: Lint code base (excluding demos) | |
command: npm run lint-non-demos | |
- name: Lint demos (1/4) | |
command: CONSTEL=1/4 npm run lint-demos | |
- name: Lint demos (2/4) | |
command: CONSTEL=2/4 npm run lint-demos | |
- name: Lint demos (3/4) | |
command: CONSTEL=3/4 npm run lint-demos | |
- name: Lint demos (4/4) | |
command: CONSTEL=4/4 npm run lint-demos | |
steps: | |
- name: Get sources | |
uses: actions/checkout@v3 | |
- name: Get changed files | |
uses: ./.github/actions/get-changed-files | |
if: github.event_name == 'pull_request' && !contains(github.event.pull_request.labels.*.name, 'force all tests') | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
path: changed-files.json | |
- name: Delete DX packages | |
run: sed -i '/23.2-next/d' ./package.json | |
- name: Download devextreme sources | |
uses: actions/download-artifact@v3 | |
with: | |
name: devextreme-sources | |
- name: Install packages | |
run: | | |
npm install devextreme-installer.tgz | |
npm install devextreme-dist-installer.tgz | |
npm install devextreme-react-installer.tgz | |
npm install devextreme-vue-installer.tgz | |
npm install devextreme-angular-installer.tgz | |
- name: Run npm install | |
run: npm install --no-audit --no-fund | |
- uses: actions/setup-dotnet@v3 | |
with: | |
dotnet-version: 5.0.408 | |
- name: Prepare dotnet | |
run: | | |
dotnet new globaljson --sdk-version 5.0.408 | |
dotnet tool install -g dotnet-format --version 5.1.225507 | |
- name: Run lint | |
env: | |
CHANGEDFILEINFOSPATH: ${{ github.workspace }}/changed-files.json | |
DEBUG: 'eslint:cli-engine,stylelint:standalone' | |
run: ${{ matrix.command }} | |
check_generated_demos: | |
name: ${{ matrix.name }} | |
runs-on: ubuntu-latest | |
timeout-minutes: 10 | |
needs: build-demos | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- name: Check generated demos (1/5) | |
command: CONSTEL=1/5 npm run convert-to-js | |
- name: Check generated demos (2/5) | |
command: CONSTEL=2/5 npm run convert-to-js | |
- name: Check generated demos (3/5) | |
command: CONSTEL=3/5 npm run convert-to-js | |
- name: Check generated demos (4/5) | |
command: CONSTEL=4/5 npm run convert-to-js | |
- name: Check generated demos (5/5) | |
command: CONSTEL=5/5 npm run convert-to-js | |
steps: | |
- name: Get sources | |
uses: actions/checkout@v3 | |
- name: Delete DX packages | |
run: sed -i '/23.2-next/d' ./package.json | |
- name: Download devextreme sources | |
uses: actions/download-artifact@v3 | |
with: | |
name: devextreme-sources | |
- name: Unpack artifacts | |
run: 7z x node_modules.7z | |
- name: Install packages | |
run: | | |
npm install devextreme-installer.tgz | |
npm install devextreme-dist-installer.tgz | |
npm install devextreme-react-installer.tgz | |
npm install devextreme-vue-installer.tgz | |
npm install devextreme-angular-installer.tgz | |
- name: Run npm install | |
run: npm install --no-audit --no-fund | |
- name: Prepare JS | |
run: npm run prepare-js | |
- name: Check generated JS demos | |
run: | | |
${{ matrix.command }} | |
git add ./JSDemos/Demos -N | |
if git diff --exit-code . ':!package-lock.json' ':!package.json' ; then | |
echo "Generated JS demos are up-to-date" | |
else | |
echo "Generated JS demos are outdated. Execute 'npm run convert-to-js ./JSDemos/Demos/**/React' and commit changes." | |
echo "If you see another diff, ensure that extra listed files have LF endings." | |
exit 1 | |
fi | |
testcafe: | |
needs: build-demos | |
strategy: | |
fail-fast: false | |
matrix: | |
CONSTEL: [react(1/4), react(2/4), react(3/4), react(4/4), vue(1/4), vue(2/4), vue(3/4), vue(4/4), angular(1/4), angular(2/4), angular(3/4), angular(4/4)] | |
runs-on: ubuntu-latest | |
name: ${{ matrix.CONSTEL }} | |
timeout-minutes: 60 | |
steps: | |
- name: Pin Chrome version | |
run: | | |
CHROME_VERSION=117.0.5938.92 | |
wget "https://dl.google.com/linux/chrome/deb/pool/main/g/google-chrome-stable/google-chrome-stable_${CHROME_VERSION}-1_amd64.deb" | |
sudo dpkg -i "google-chrome-stable_${CHROME_VERSION}-1_amd64.deb" | |
- name: Get sources | |
uses: actions/checkout@v3 | |
- name: Delete DX packages | |
run: sed -i '/23.2-next/d' ./package.json | |
- name: Download devextreme sources | |
uses: actions/download-artifact@v3 | |
with: | |
name: devextreme-sources | |
- name: Unpack artifacts | |
run: 7z x node_modules.7z | |
- name: Prepare JS | |
run: npm run prepare-js | |
- name: Update bundles config | |
run: npx gulp update-config | |
- name: Run Web Server | |
run: | | |
python -m http.server 8080 & | |
python -m http.server 8081 & | |
python -m http.server 8082 & | |
python -m http.server 8083 & | |
- name: Get changed files | |
uses: ./.github/actions/get-changed-files | |
if: github.event_name == 'pull_request' && !contains(github.event.pull_request.labels.*.name, 'force all tests') | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
path: changed-files.json | |
- name: Run TestCafe tests | |
env: | |
CHANGEDFILEINFOSPATH: ${{ github.workspace }}/changed-files.json | |
BROWSERS: chrome:headless --disable-partial-raster --disable-skia-runtime-opts --run-all-compositor-stages-before-draw --disable-new-content-rendering-timeout --disable-threaded-animation --disable-threaded-scrolling --disable-checker-imaging --disable-image-animation-resync --use-gl="swiftshader" --disable-features=PaintHolding --js-flags=--random-seed=2147483647 --font-render-hinting=none --disable-font-subpixel-positioning | |
#DEBUG: hammerhead:*,testcafe:* | |
CONCURRENCY: 4 | |
TCQUARANTINE: true | |
CONSTEL: ${{ matrix.CONSTEL }} | |
# DISABLE_DEMO_TEST_SETTINGS: all # Uncomment to ignore all the visualtestrc.json settings | |
# DISABLE_DEMO_TEST_SETTINGS: ignore # Uncomment to ignore the `ignore` field | |
# DISABLE_DEMO_TEST_SETTINGS: comparison-options # Uncomment to ignore the `comparison-options` field | |
CI_ENV: true # The `ignore` field in the visualtestrc.json should be disabled when running test locally | |
run: npm run test-testcafe | |
- name: Get screenshots artifacts name | |
if: ${{ failure() }} | |
id: screenshotname | |
run: echo "value=$(echo "${{ matrix.CONSTEL }}" | grep -oP "^\w+")" >> $GITHUB_OUTPUT | |
- name: Copy screenshots artifacts | |
if: ${{ failure() }} | |
uses: actions/upload-artifact@v3 | |
with: | |
name: screenshots-${{ steps.screenshotname.outputs.value }} | |
path: ${{ github.workspace }}/testing/artifacts/compared-screenshots/* | |
if-no-files-found: ignore |