Skip to content

232/merge is being tested #890

232/merge is being tested

232/merge is being tested #890

name: Vector Vscode Vcast Tests
run-name: ${{ github.ref_name }} is being tested
on:
push:
branches:
- main
pull_request:
types: [opened, reopened, synchronize, ready_for_review]
branches:
- main
release:
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
jobs:
unit-tests:
if: github.event.pull_request.draft == false
permissions: write-all
runs-on: [self-hosted, vscode-vcast]
env:
ENABLE_ATG_FEATURE: TRUE
LM_LICENSE_FILE: /vcast/vector-license.lic
VECTOR_LICENSE_FILE: /vcast/vector-license.lic
container:
image: rds-vtc-docker-dev-local.vegistry.vg.vector.int/vcast/vscode_ubuntu24_ci:node_18_dynamic_mounting
options: --user vcast_user --mount type=bind,source=${{ vars.VCAST_RELEASES_PATH }},target=/vcast
strategy:
matrix:
vcast: ${{ fromJSON(vars.VCAST_VERSIONS) }}
steps:
- name: Check out repository
id: checkout
uses: actions/checkout@v4
continue-on-error: true
- name: Wait before retry
id: should-retry-checkout
if: failure()
continue-on-error: true
run: |
sleep 10
exit 1
- name: Check out repository (retry)
if: failure()
uses: actions/checkout@v4
# Run tests
- name: Restore cached dependencies
id: cache-dependencies-restore
uses: actions/cache/restore@v4
with:
path: |
node_modules
key: ${{ runner.os }}-dependencies-${{ hashFiles('package.json') }}
- name: Install dependencies
if: steps.cache-dependencies-restore.outputs.cache-hit != 'true'
run: npm install
- name: Save dependencies
if: steps.cache-dependencies-restore.outputs.cache-hit != 'true'
uses: actions/cache/save@v4
with:
path: |
node_modules
key: ${{ runner.os }}-dependencies-${{ hashFiles('package.json') }}
- name: Package with VSCE
run: npm run package
- name: Vcast activation
run: |
RELEASE_DIR=/vcast/${{ matrix.vcast }}
if [ ! -d "$RELEASE_DIR" ]; then
echo "Error: $RELEASE_DIR does not exist."
exit 1
fi
echo 'Activating Vcast ${{ matrix.vcast }}'
echo "VECTORCAST_DIR=$RELEASE_DIR" >> $GITHUB_ENV
echo "PATH=$RELEASE_DIR:$PATH" >> $GITHUB_ENV
shell: bash
- name: Clicast server tests
run: ./tests/clicast-server/run_clicast_server_tests.sh
shell: bash
- name: Run unit tests
run: npm run gh-test | tee output.txt
shell: bash
- name: Publish Unit Test Results
uses: EnricoMi/publish-unit-test-result-action/linux@v2
if: always()
env:
CHECK_NAME: Unit Test results - Vcast ${{ matrix.vcast }}
with:
check_name: ${{ env.CHECK_NAME }}
files: |
./test-output.xml
- name: Show coverage summary
if: ${{ always() && strategy.job-index == '0' }}
run: |
echo "### Coverage summary - Unit tests" >> $GITHUB_STEP_SUMMARY
{
echo '```'
sed -n '/Coverage report from/,$p' output.txt
echo '```'
} >> $GITHUB_STEP_SUMMARY
- name: Upload coverage artifacts
if: ${{ always() && strategy.job-index == '0' }}
run: |
curl -Os https://uploader.codecov.io/v0.7.1/linux/codecov
chmod +x codecov
./codecov -f ./coverage/coverage-final.json -F Unit -n vscode-vcast-unittests -t ${{ secrets.CODECOV_TOKEN }} -C ${{ github.sha }} -r ${{ github.repository }} -U ${http_proxy} >> out.txt
cat out.txt | tail -n 1 | awk -F "'info'] " '{print $2}' | python3 -c 'import json,sys;obj=json.load(sys.stdin);print(obj.get("resultURL", ""))' > url.txt
title="Coverage report URL" && \
[ -z $(cat url.txt) ] && echo "::notice title=$title::URL not found" || echo "::notice title=$title::$(cat url.txt)"
# Upload artifacts
- name: Find VSIX File
if: always()
run: |
VSIX_FILE=$(ls /__w/vector-vscode-vcast/vector-vscode-vcast/*.vsix)
echo "VSIX_FILE=$VSIX_FILE" >> $GITHUB_ENV
- name: Upload vectorcasttestexplorer artifact
uses: actions/upload-artifact@v4
if: ${{ always() && strategy.job-index == '0' }}
with:
name: vectorcasttestexplorer
path: ${{ env.VSIX_FILE }}
- name: Upload coverage artifact
uses: actions/upload-artifact@v4
if: ${{ always() && strategy.job-index == '0' }}
with:
name: coverage
path: ./coverage
# Upload release asset
- name: Upload release asset
if: ${{ github.event_name == 'release' && strategy.job-index == '0' }}
run: |
url="${{ github.event.release.upload_url }}" && \
export upload_url=${url%%\{*}?name=vectorcasttestexplorer-${{ github.event.release.tag_name }}.vsix && \
curl -L \
-X POST \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" \
-H "X-GitHub-Api-Version: 2022-11-28" \
-H "Content-Type: application/octet-stream" \
$upload_url \
--data-binary "@${{ env.VSIX_FILE }}"
generate-e2e-matrix:
if: github.event.pull_request.draft == false
permissions: write-all
runs-on: [self-hosted, vscode-vcast]
container:
image: rds-vtc-docker-dev-local.vegistry.vg.vector.int/vcast/vscode_ubuntu24_ci:node_18_dynamic_mounting
options: --user vcast_user
outputs:
version_group_matrix: ${{ steps.set-matrix.outputs.matrix }}
steps:
- name: Check out repository
id: checkout
uses: actions/checkout@v4
continue-on-error: true
- name: Wait before retry
id: should-retry-checkout
if: failure()
continue-on-error: true
run: |
sleep 10
exit 1
- name: Check out repository (retry)
if: failure()
uses: actions/checkout@v4
- name: Set jobs matrix
id: set-matrix
env:
VCAST_VERSIONS: ${{ vars.VCAST_VERSIONS }}
run: |
cd tests/internal/e2e/test
npx tsx get_gha_matrix.ts
echo "matrix=$(cat gha_matrix.json)" >> "$GITHUB_OUTPUT"
e2e-tests:
needs: generate-e2e-matrix
if: github.event.pull_request.draft == false
permissions: write-all
runs-on: [self-hosted, vscode-vcast]
container:
image: rds-vtc-docker-dev-local.vegistry.vg.vector.int/vcast/vscode_ubuntu24_ci:node_18_dynamic_mounting
options: --user vcast_user --mount type=bind,source=${{ vars.VCAST_RELEASES_PATH }},target=/vcast
strategy:
matrix:
include: ${{ fromJSON(needs.generate-e2e-matrix.outputs.version_group_matrix) }}
env:
BRANCH_REF: ${{ github.ref }}
GITHUB_REPOSITORY: ${{ github.repository }}
GITHUB_SHA: ${{ github.sha }}
RUN_BY_GROUP: "True"
RUN_GROUP_NAME: ${{ matrix.group }}
ENABLE_ATG_FEATURE: TRUE
LM_LICENSE_FILE: /vcast/vector-license.lic
VECTOR_LICENSE_FILE: /vcast/vector-license.lic
steps:
- name: Check out repository
id: checkout
uses: actions/checkout@v4
continue-on-error: true
- name: Wait before retry
id: should-retry-checkout
if: failure()
continue-on-error: true
run: |
sleep 10
exit 1
- name: Check out repository (retry)
if: failure()
uses: actions/checkout@v4
- name: Restore cached dependencies
id: cache-dependencies-restore
uses: actions/cache/restore@v4
with:
path: |
node_modules
key: ${{ runner.os }}-dependencies-${{ hashFiles('package.json') }}
- name: Install dependencies
if: steps.cache-dependencies-restore.outputs.cache-hit != 'true'
run: npm install
- name: Save dependencies
if: steps.cache-dependencies-restore.outputs.cache-hit != 'true'
uses: actions/cache/save@v4
with:
path: |
node_modules
key: ${{ runner.os }}-dependencies-${{ hashFiles('package.json') }}
- name: Package with VSCE
run: npm run package
- name: Restore cached dependencies - node
id: cache-dependencies-restore-node
uses: actions/cache/restore@v4
with:
path: |
tests/internal/e2e/node_modules
key: ${{ runner.os }}-dependencies-${{ hashFiles('tests/internal/e2e/package.json') }}
- name: Restore cached dependencies - vscode
id: cache-dependencies-restore-vscode
uses: actions/cache/restore@v4
with:
path: |
tests/internal/e2e/.wdio-vscode-service
key: ${{ runner.os }}-dependencies-webdriver-vscode
- name: Vcast activation
run: |
RELEASE_DIR=/vcast/${{ matrix.version }}
if [ ! -d "$RELEASE_DIR" ]; then
echo "Error: $RELEASE_DIR does not exist."
exit 1
fi
echo 'Activating Vcast ${{ matrix.version }}'
echo "VECTORCAST_DIR=$RELEASE_DIR" >> $GITHUB_ENV
echo "PATH=$RELEASE_DIR:$PATH" >> $GITHUB_ENV
USE_VCAST_24=$(if [[ $(cat $RELEASE_DIR/DATA/tool_version.txt) == 24* ]]; then echo "True"; else echo "False"; fi)
echo "USE_VCAST_24=$USE_VCAST_24" >> $GITHUB_ENV
shell: bash
- name: Run tests
run: |
./tests/internal/e2e/run_e2e_tests.sh
- name: Publish e2e tests results
uses: EnricoMi/publish-unit-test-result-action/linux@v2
if: always()
env:
CHECK_NAME: E2e Test results - Vcast ${{ matrix.version }} - Group ${{ matrix.group }}
with:
check_name: ${{ env.CHECK_NAME }}
large_files: true
files: |
./tests/internal/e2e/test_results/*.xml
- name: Show run summary
if: always()
run: |
echo "### Run summary - Vcast ${{ matrix.version }} - Group ${{ matrix.group }}" >> $GITHUB_STEP_SUMMARY
content=$([ -s ./tests/internal/e2e/gh_e2e_summary.md ] && cat ./tests/internal/e2e/gh_e2e_summary.md || echo 'Not available')
echo "${content}" >> $GITHUB_STEP_SUMMARY
COMMIT_DATE=$(git log -1 --format=%cd --date=format:%Y-%m-%dT%H:%M:%S)
ARTIFACTORY_URL="https://artifactory.vi.vector.int:443/artifactory/rds-build-packages-generic-dev/vscode/tests-results/${{ github.ref_name }}/$COMMIT_DATE-${{ github.sha }}"
count=`ls -1 tests/internal/e2e/*.png 2>/dev/null | wc -l`
if [ $count != 0 ] ; then
cd tests/internal/e2e
tar -cvzf e2e_vcast${{ matrix.version }}_${{ matrix.group }}_screenshots.tar.gz *.png > /dev/null
URL="$ARTIFACTORY_URL/e2e_vcast${{ matrix.version }}_${{ matrix.group }}_screenshots/"
curl -H "X-Explode-Archive: true" -H "X-JFrog-Art-Api:${{ secrets.ARTIFACTORY_TOKEN }}" -X PUT $URL -T e2e_vcast${{ matrix.version }}_${{ matrix.group }}_screenshots.tar.gz
cd ../../..
echo "[Screenshots]($URL)" >> $GITHUB_STEP_SUMMARY
fi
- name: Save dependencies - node
if: steps.cache-dependencies-restore-node.outputs.cache-hit != 'true'
uses: actions/cache/save@v4
with:
path: |
tests/internal/e2e/node_modules
key: ${{ runner.os }}-dependencies-${{ hashFiles('tests/internal/e2e/package.json') }}
- name: Save dependencies - vscode
if: always() && steps.cache-dependencies-restore-vscode.outputs.cache-hit != 'true'
uses: actions/cache/save@v4
with:
path: |
tests/internal/e2e/.wdio-vscode-service
key: ${{ runner.os }}-dependencies-webdriver-vscode
black:
if: github.event.pull_request.draft == false
permissions: write-all
runs-on: [ self-hosted, vscode-vcast]
container:
image: rds-vtc-docker-dev-local.vegistry.vg.vector.int/vcast/vscode_ubuntu24_ci:node_18_dynamic_mounting
options: --user vcast_user
steps:
- name: Check out repository
id: checkout
uses: actions/checkout@v4
continue-on-error: true
- name: Wait before retry
id: should-retry-checkout
if: failure()
continue-on-error: true
run: |
sleep 10
exit 1
- name: Check out repository (retry)
if: failure()
uses: actions/checkout@v4
- name: Run black
shell: bash
run: |
/home/vcast_user/.venv/bin/python -m black . --check --extend-exclude '/(.*venv.*)/' > output.log 2>&1; echo $? > exitcode.txt
- name: Summary
shell: bash
if: always()
run: |
echo "### Black output" >> $GITHUB_STEP_SUMMARY
{
echo '```'
cat output.log
echo '```'
} >> $GITHUB_STEP_SUMMARY
- name: Exit with code
shell: bash
if: always()
run: |
if [ -f exitcode.txt ]; then
exit $(cat exitcode.txt)
fi
prettier:
if: github.event.pull_request.draft == false
permissions: write-all
runs-on: [ self-hosted, vscode-vcast]
container:
image: rds-vtc-docker-dev-local.vegistry.vg.vector.int/vcast/vscode_ubuntu24_ci:node_18_dynamic_mounting
options: --user vcast_user
steps:
- name: Check out repository
id: checkout
uses: actions/checkout@v4
continue-on-error: true
- name: Wait before retry
id: should-retry-checkout
if: failure()
continue-on-error: true
run: |
sleep 10
exit 1
- name: Check out repository (retry)
if: failure()
uses: actions/checkout@v4
- name: Run prettier
shell: bash
run: |
npm install prettier@$(node -pe "require('./package').devDependencies.prettier")
npx prettier -c . > output.log 2>&1; echo $? > exitcode.txt
- name: Summary
shell: bash
if: always()
run: |
echo "### Prettier output" >> $GITHUB_STEP_SUMMARY
{
echo '```'
cat output.log
echo '```'
} >> $GITHUB_STEP_SUMMARY
- name: Exit with code
shell: bash
if: always()
run: |
if [ -f exitcode.txt ]; then
exit $(cat exitcode.txt)
fi
xo:
if: github.event.pull_request.draft == false
permissions: write-all
runs-on: [ self-hosted, vscode-vcast]
container:
image: rds-vtc-docker-dev-local.vegistry.vg.vector.int/vcast/vscode_ubuntu24_ci:node_18_dynamic_mounting
options: --user vcast_user
steps:
- name: Check out repository
id: checkout
uses: actions/checkout@v4
continue-on-error: true
- name: Wait before retry
id: should-retry-checkout
if: failure()
continue-on-error: true
run: |
sleep 10
exit 1
- name: Check out repository (retry)
if: failure()
uses: actions/checkout@v4
- name: Run xo
shell: bash
run: |
npm install xo@$(node -pe "require('./package').dependencies.xo")
npx xo tests/unit > output.log 2>&1; echo $? > exitcode.txt
- name: Summary
shell: bash
if: always()
run: |
echo "### Xo output" >> $GITHUB_STEP_SUMMARY
{
echo '```'
cat output.log
echo '```'
} >> $GITHUB_STEP_SUMMARY
- name: Exit with code
shell: bash
if: always()
run: |
if [ -f exitcode.txt ]; then
exit $(cat exitcode.txt)
fi