diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index fd52bcfa89..c6da9a0eb3 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -20,7 +20,7 @@ on: schedule: - cron: '32 22 * * 6' -permissions: # limit the permissions of the GITHIUB_TOKEN to reading repository contents +permissions: # limit the permissions of the GITHUB_TOKEN to reading repository contents contents: read jobs: @@ -51,7 +51,7 @@ jobs: # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@v3.26.6 + uses: github/codeql-action/init@v3.27.5 with: languages: ${{ matrix.language }} # If you wish to specify custom queries, you can do so here or in a config file. @@ -65,7 +65,7 @@ jobs: # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild - uses: github/codeql-action/autobuild@v3.26.6 + uses: github/codeql-action/autobuild@v3.27.5 # ℹ️ Command-line programs to run using the OS shell. # πŸ“š See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun @@ -78,6 +78,6 @@ jobs: # ./location_of_script_within_repo/buildscript.sh - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v3.26.6 + uses: github/codeql-action/analyze@v3.27.5 with: category: "/language:${{matrix.language}}" diff --git a/.github/workflows/generate_release_notes.yml b/.github/workflows/generate_release_notes.yml index c115984b6c..725488c5f9 100644 --- a/.github/workflows/generate_release_notes.yml +++ b/.github/workflows/generate_release_notes.yml @@ -3,7 +3,7 @@ name: "[Release] Step 1: Generate release notes" on: workflow_dispatch: -# limit the permissions of the GITHIUB_TOKEN to reading repository contents +# limit the permissions of the GITHUB_TOKEN to reading repository contents # the subsequent pull request uses a token from the 'generate-token' step permissions: contents: read @@ -55,6 +55,6 @@ jobs: labels: | automated pr release - reviewers: adamvduke,jakeouellette,tonybaroneee + reviewers: kaibolay,jakeouellette,tonybaroneee owners draft: false diff --git a/.github/workflows/integration_tests_pointer.yml b/.github/workflows/integration_tests_pointer.yml index cfe9b63dbc..def62e1042 100644 --- a/.github/workflows/integration_tests_pointer.yml +++ b/.github/workflows/integration_tests_pointer.yml @@ -6,7 +6,7 @@ on: repository_dispatch: types: [ integration-pointer] -permissions: # limit the permissions of the GITHIUB_TOKEN to reading repository contents +permissions: # limit the permissions of the GITHUB_TOKEN to reading repository contents contents: read jobs: diff --git a/.github/workflows/macos_workflow.yml b/.github/workflows/macos_workflow.yml index 8b2c634815..cd110cc89b 100644 --- a/.github/workflows/macos_workflow.yml +++ b/.github/workflows/macos_workflow.yml @@ -8,7 +8,7 @@ on: branches: - '*' -permissions: # limit the permissions of the GITHIUB_TOKEN to reading repository contents +permissions: # limit the permissions of the GITHUB_TOKEN to reading repository contents contents: read jobs: @@ -27,6 +27,7 @@ jobs: - uses: gradle/wrapper-validation-action@v3 - uses: actions/setup-java@v4 with: + distribution: 'adopt' java-version: 15 - uses: actions/cache@v4 with: @@ -35,10 +36,11 @@ jobs: restore-keys: | ${{ runner.os }}-2-gradle- + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v4 + - name: Gradle clean build - uses: gradle/gradle-build-action@v3.5.0 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} HEAD_REF: ${{ github.head_ref }} - with: - arguments: "clean build" + run: ./gradlew clean build diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 473f2c2cac..eca0fc84e6 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -12,7 +12,7 @@ on: tags: v* # TODO: update workflow permissions to least privilege after auditing all the APIs used -# permissions: # limit the permissions of the GITHIUB_TOKEN to reading repository contents +# permissions: # limit the permissions of the GITHUB_TOKEN to reading repository contents # contents: read jobs: @@ -59,61 +59,62 @@ jobs: echo "$GITHUB_SHA" > ./test_runner/src/main/resources/revision.txt echo "$RELEASE_TAG" > ./test_runner/src/main/resources/version.txt + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v4 + - name: Gradle Build Flank - uses: gradle/gradle-build-action@v3.5.0 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} HEAD_REF: ${{ github.head_ref }} - with: - arguments: "clean test_runner:build test_runner:shadowJar" + run: ./gradlew clean test_runner:build test_runner:shadowJar - name: Delete old release - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | gh --version flankScripts github delete_release --git-tag=$RELEASE_TAG - name: Delete old tag if: ${{ env.RELEASE_TAG == 'flank-snapshot' }} - run: flankScripts github delete_old_tag --git-tag=$RELEASE_TAG --username=$GITHUB_ACTOR --token=${{ secrets.GITHUB_TOKEN }} + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: flankScripts github delete_old_tag --git-tag=$RELEASE_TAG --username=$GITHUB_ACTOR --token="$GH_TOKEN" - name: Release snapshot if: ${{ env.RELEASE_TAG == 'flank-snapshot' }} env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: flankScripts github make_release --input-file=./test_runner/build/libs/flank.jar --git-tag=$RELEASE_TAG --commit-hash=$GITHUB_SHA --snapshot - name: Release stable if: startsWith(github.ref, 'refs/tags/v') env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: flankScripts github make_release --input-file=./test_runner/build/libs/flank.jar --git-tag=$RELEASE_TAG --token=${{ secrets.GITHUB_TOKEN }} + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: flankScripts github make_release --input-file=./test_runner/build/libs/flank.jar --git-tag=$RELEASE_TAG --token="$GH_TOKEN" - name: Append checksum to release env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | sha256sum ./test_runner/build/libs/flank.jar > flank.sha256 gh release upload $RELEASE_TAG flank.sha256 - name: Gradle Upload to MavenCentral - uses: gradle/gradle-build-action@v3.5.0 env: PGP_SIGNING_KEY: ${{ secrets.PGP_SIGNING_KEY }} - with: - arguments: :test_runner:publishMavenJavaPublicationToMavenCentralRepository -PMVN_CENTRAL_USER=${{ secrets.MVN_CENTRAL_USER }} -PMVN_CENTRAL_PASSWORD=${{ secrets.MVN_CENTRAL_PASSWORD }} + MVN_CENTRAL_USER: ${{ secrets.MVN_CENTRAL_USER }} + PMVN_CENTRAL_PASSWORD: ${{ secrets.MVN_CENTRAL_PASSWORD }} + run: ./gradlew :test_runner:publishMavenJavaPublicationToMavenCentralRepository -PMVN_CENTRAL_USER="$MVN_CENTRAL_USER" -PMVN_CENTRAL_PASSWORD="$MVN_CENTRAL_PASSWORD" - name: Gradle close staging on MavenCentral - uses: gradle/gradle-build-action@v3.5.0 if: startsWith(github.ref, 'refs/tags/v') - with: - arguments: closeAndReleaseRepository -PMVN_CENTRAL_USER=${{ secrets.MVN_CENTRAL_USER }} -PMVN_CENTRAL_PASSWORD=${{ secrets.MVN_CENTRAL_PASSWORD }} + env: + MVN_CENTRAL_USER: ${{ secrets.MVN_CENTRAL_USER }} + MVN_CENTRAL_PASSWORD: ${{ secrets.MVN_CENTRAL_PASSWORD }} + run: ./gradlew closeAndReleaseRepository -PMVN_CENTRAL_USER="$MVN_CENTRAL_USER" -PMVN_CENTRAL_PASSWORD="$MVN_CENTRAL_PASSWORD" - name: Gradle Upload to GitHub packages - uses: gradle/gradle-build-action@v3.5.0 if: startsWith(github.ref, 'refs/tags/v') env: PGP_SIGNING_KEY: ${{ secrets.PGP_SIGNING_KEY }} - with: - arguments: ":test_runner:publishMavenJavaPublicationToGitHubPackagesRepository -PGITHUB_TOKEN=${{ secrets.GITHUB_TOKEN }}" + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: ./gradlew :test_runner:publishMavenJavaPublicationToGitHubPackagesRepository -PGITHUB_TOKEN="$GH_TOKEN" diff --git a/.github/workflows/release_flank_scripts.yml b/.github/workflows/release_flank_scripts.yml index 4f13d1e0b5..2641cdb27d 100644 --- a/.github/workflows/release_flank_scripts.yml +++ b/.github/workflows/release_flank_scripts.yml @@ -8,7 +8,7 @@ on: - 'master' # TODO: update workflow permissions to least privilege after auditing all the APIs used -# permissions: # limit the permissions of the GITHIUB_TOKEN to reading repository contents +# permissions: # limit the permissions of the GITHUB_TOKEN to reading repository contents # contents: read jobs: @@ -25,9 +25,10 @@ jobs: - uses: actions/checkout@v4 - uses: gradle/wrapper-validation-action@v3 - - name: Gradle Upload to Github packages and Github release - uses: gradle/gradle-build-action@v3.5.0 + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v4 + + - name: Gradle Upload to GitHub packages and GitHub release env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - arguments: "flank-scripts:releaseFlankScripts -PGITHUB_TOKEN=${{ secrets.GITHUB_TOKEN }}" + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: ./gradlew flank-scripts:releaseFlankScripts -PGITHUB_TOKEN="$GH_TOKEN" diff --git a/.github/workflows/release_flank_wrapper.yml b/.github/workflows/release_flank_wrapper.yml index 9c972bceb7..ba34cab8c0 100644 --- a/.github/workflows/release_flank_wrapper.yml +++ b/.github/workflows/release_flank_wrapper.yml @@ -8,7 +8,7 @@ on: - 'master' # TODO: update workflow permissions to least privilege after auditing all the APIs used -# permissions: # limit the permissions of the GITHIUB_TOKEN to reading repository contents +# permissions: # limit the permissions of the GITHUB_TOKEN to reading repository contents # contents: read jobs: @@ -25,9 +25,10 @@ jobs: - uses: actions/checkout@v4 - uses: gradle/wrapper-validation-action@v3 - - name: Gradle Upload to Github packages and Github release - uses: gradle/gradle-build-action@v3.5.0 + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v4 + + - name: Gradle Upload to GitHub packages and GitHub release env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - arguments: "flank_wrapper:releaseFlankWrapper -PGITHUB_TOKEN=${{ secrets.GITHUB_TOKEN }}" + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: ./gradlew flank-wrapper:releaseFlankWrapper -PGITHUB_TOKEN="$GH_TOKEN" diff --git a/.github/workflows/run_integration_tests.yml b/.github/workflows/run_integration_tests.yml index 45eeffb921..cad305204b 100644 --- a/.github/workflows/run_integration_tests.yml +++ b/.github/workflows/run_integration_tests.yml @@ -6,7 +6,7 @@ on: workflow_dispatch: # or manually # TODO: update workflow permissions to least privilege after auditing all the APIs used -# permissions: # limit the permissions of the GITHIUB_TOKEN to reading repository contents +# permissions: # limit the permissions of the GITHUB_TOKEN to reading repository contents # contents: read jobs: @@ -79,14 +79,15 @@ jobs: fi shell: bash + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v4 + - name: Gradle integration tests - uses: gradle/gradle-build-action@v3.5.0 id: run-it env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} HEAD_REF: ${{ github.ref }} - with: - arguments: "integrationTests" + run: ./gradlew integrationTests - name: Export Variables for FlankScripts if: ${{ always() }} @@ -117,11 +118,13 @@ jobs: echo "./flank-scripts/bash" >> $GITHUB_PATH - name: Process IT results + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | flankScripts integration_tests process_results \ --global-result=${{ needs.run-it-full-suite.outputs.job_status }} \ --run-result='${{ toJSON(env) }}' \ - --github-token=${{ secrets.GITHUB_TOKEN }} \ + --github-token="$GH_TOKEN" \ --run-id=${{ github.run_id }} trigger-pointer: diff --git a/.github/workflows/scorecards.yml b/.github/workflows/scorecards.yml index 49ed1fb730..513de891a7 100644 --- a/.github/workflows/scorecards.yml +++ b/.github/workflows/scorecards.yml @@ -63,6 +63,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@v3.26.6 # tag=v1.0.26 + uses: github/codeql-action/upload-sarif@v3.27.5 # tag=v1.0.26 with: sarif_file: results.sarif diff --git a/.github/workflows/tag_next_release.yml b/.github/workflows/tag_next_release.yml index 50d9734ddc..ab425cd978 100644 --- a/.github/workflows/tag_next_release.yml +++ b/.github/workflows/tag_next_release.yml @@ -6,7 +6,7 @@ on: types: [ closed ] # TODO: update workflow permissions to least privilege after auditing all the APIs used -# permissions: # limit the permissions of the GITHIUB_TOKEN to reading repository contents +# permissions: # limit the permissions of the GITHUB_TOKEN to reading repository contents # contents: read jobs: @@ -34,8 +34,10 @@ jobs: ./gradlew :flank-scripts:download echo "./flank-scripts/bash" >> $GITHUB_PATH - name: Set next release tag variable + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | - TAG=$(flankScripts release next_tag --token=${{ secrets.GITHUB_TOKEN }}) + TAG=$(flankScripts release next_tag --token="$GH_TOKEN") echo "NEXT_RELEASE_TAG=$(echo $TAG)" >> $GITHUB_ENV - name: Push tag diff --git a/.github/workflows/ubuntu_workflow.yml b/.github/workflows/ubuntu_workflow.yml index cde9692eaa..e3ab5cf2ec 100644 --- a/.github/workflows/ubuntu_workflow.yml +++ b/.github/workflows/ubuntu_workflow.yml @@ -8,7 +8,7 @@ on: branches: - '*' -permissions: # limit the permissions of the GITHIUB_TOKEN to reading repository contents +permissions: # limit the permissions of the GITHUB_TOKEN to reading repository contents contents: read jobs: @@ -41,17 +41,19 @@ jobs: restore-keys: | ${{ runner.os }}-gradle- + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v4 + - id: build name: Gradle clean build - uses: gradle/gradle-build-action@v3.5.0 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} HEAD_REF: ${{ github.head_ref }} - with: - arguments: "clean build" - + run: ./gradlew clean build + publish-scan-url: - needs: [ build ] + needs: + - build permissions: pull-requests: write # to allow creating or updating a comment if: ${{ github.event_name == 'pull_request' }} @@ -67,34 +69,15 @@ jobs: uses: 1466587594/get-current-time@v2 id: current-time with: - format: 'YYYY-MM-DD HH:mm:ss' + format: "YYYY-MM-DD HH:mm:ss" utcOffset: "+00:00" - - name: Find Comment - uses: peter-evans/find-comment@v3 - id: fc - with: - issue-number: ${{ github.event.pull_request.number }} - comment-author: 'github-actions[bot]' - body-includes: Buildscan url for ubuntu-workflow run - - - name: Create comment - if: ${{ steps.fc.outputs.comment-id == 0 }} - uses: peter-evans/create-or-update-comment@v4 - with: - issue-number: ${{ github.event.pull_request.number }} - body: | - **Timestamp:** ${{ steps.current-time.outputs.formattedTime }} - **Buildscan url for ubuntu-workflow run [${{ github.run_id }}](https://github.com/Flank/flank/actions/runs/${{ github.run_id }})** - ${{ needs.build.outputs.build-scan-url }} - - - name: Update comment - if: ${{ steps.fc.outputs.comment-id != 0 }} - uses: peter-evans/create-or-update-comment@v4 - with: - comment-id: ${{ steps.fc.outputs.comment-id }} - edit-mode: replace - body: | - **Timestamp:** ${{ steps.current-time.outputs.formattedTime }} - **Buildscan url for ubuntu-workflow run [${{ github.run_id }}](https://github.com/Flank/flank/actions/runs/${{ github.run_id }})** - ${{ needs.build.outputs.build-scan-url }} + - name: Write Buildscan URL to Summary + env: + TIMESTAMP: ${{ steps.current-time.outputs.formattedTime }} + BUILD_SCAN_URL: ${{ needs.build.outputs.build-scan-url }} + run: | + echo "**Timestamp:** $TIMESTAMP" >> $GITHUB_STEP_SUMMARY + echo "**Buildscan URL for ubuntu-workflow run:**" >> $GITHUB_STEP_SUMMARY + echo "[$GITHUB_RUN_ID](https://github.com/Flank/flank/actions/runs/$GITHUB_RUN_ID)" >> $GITHUB_STEP_SUMMARY + echo "$BUILD_SCAN_URL" >> $GITHUB_STEP_SUMMARY diff --git a/.github/workflows/update_dependencies.yml b/.github/workflows/update_dependencies.yml index 3185e4e7c7..c6f47ffad1 100644 --- a/.github/workflows/update_dependencies.yml +++ b/.github/workflows/update_dependencies.yml @@ -4,7 +4,7 @@ on: workflow_dispatch: # TODO: update workflow permissions to least privilege after auditing all the APIs used -# permissions: # limit the permissions of the GITHIUB_TOKEN to reading repository contents +# permissions: # limit the permissions of the GITHUB_TOKEN to reading repository contents # contents: read jobs: @@ -28,10 +28,11 @@ jobs: app_id: ${{ secrets.FLANK_RELEASE_APP_ID }} private_key: ${{ secrets.FLANK_RELEASE_PRIVATE_KEY }} + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v4 + - name: Gradle dependency updates raport - uses: gradle/gradle-build-action@v3.5.0 - with: - arguments: dependencyUpdates -DoutputFormatter=json -DoutputDir=. + run: ./gradlew dependencyUpdates -DoutputFormatter=json -DoutputDir=. - name: Download flankScripts and add it to PATH env: @@ -57,7 +58,7 @@ jobs: labels: | automated pr dependencies - reviewers: adamvduke,jakeouellette,tonybaroneee + reviewers: kaibolay,jakeouellette,tonybaroneee draft: false update_firebase_api: @@ -101,8 +102,8 @@ jobs: body: "Firebase Api update" labels: | automated pr - firease_api - reviewers: adamvduke,jakeouellette,tonybaroneee + firebase_api + reviewers: kaibolay,jakeouellette,tonybaroneee draft: false check_for_sdk_updates: @@ -117,9 +118,11 @@ jobs: echo "./flank-scripts/bash" >> $GITHUB_PATH - name: Run SDK check + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | flankScripts firebase check_for_sdk_updates \ - --github-token=${{ secrets.GITHUB_TOKEN }} \ + --github-token="$GH_TOKEN" \ trigger-pointer: runs-on: ubuntu-latest diff --git a/.github/workflows/update_dependencies_pointer.yml b/.github/workflows/update_dependencies_pointer.yml index e0a0adcade..fce0a2c8d2 100644 --- a/.github/workflows/update_dependencies_pointer.yml +++ b/.github/workflows/update_dependencies_pointer.yml @@ -6,7 +6,7 @@ on: repository_dispatch: types: [ dependencies-pointer ] -permissions: # limit the permissions of the GITHIUB_TOKEN to reading repository contents +permissions: # limit the permissions of the GITHUB_TOKEN to reading repository contents contents: read jobs: diff --git a/.github/workflows/windows_workflow.yml b/.github/workflows/windows_workflow.yml index f61d346a75..b84b8c4b48 100644 --- a/.github/workflows/windows_workflow.yml +++ b/.github/workflows/windows_workflow.yml @@ -5,7 +5,7 @@ on: branches: - '*' -permissions: # limit the permissions of the GITHIUB_TOKEN to reading repository contents +permissions: # limit the permissions of the GITHUB_TOKEN to reading repository contents contents: read jobs: @@ -29,10 +29,11 @@ jobs: restore-keys: | ${{ runner.os }}-2-gradle- + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v4 + - name: Gradle clean build - uses: gradle/gradle-build-action@v3.5.0 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} HEAD_REF: ${{ github.head_ref }} - with: - arguments: "clean build" + run: ./gradlew clean build diff --git a/.github/workflows/wsl_workflow.yml b/.github/workflows/wsl_workflow.yml index e36270c410..7c810fc5af 100644 --- a/.github/workflows/wsl_workflow.yml +++ b/.github/workflows/wsl_workflow.yml @@ -57,17 +57,18 @@ jobs: GCLOUD_DIR="$HOME/.config/gcloud/" mkdir -p "$GCLOUD_DIR" echo "$GCLOUD_KEY" | base64 --ignore-garbage --decode > "$GCLOUD_DIR/application_default_credentials.json" + + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v4 - name: Gradle Integration Tests Android - uses: gradle/gradle-build-action@v3.5.0 env: GOOGLE_APPLICATION_CREDENTIALS: ${{ secrets.GOOGLE_APPLICATION_CREDENTIALS }} - with: - arguments: "--info :integration_tests:test --tests IntegrationTests.shouldMatchAndroidSuccessExitCodeAndPattern -Dflank-path=../test_runner/build/libs/flank.jar -Dyml-path=./src/test/resources/flank_android.yml" + run: | + ./gradlew --info :integration_tests:test --tests IntegrationTests.shouldMatchAndroidSuccessExitCodeAndPattern -Dflank-path=../test_runner/build/libs/flank.jar -Dyml-path=./src/test/resources/flank_android.yml - name: Gradle Integration Tests iOS - uses: gradle/gradle-build-action@v3.5.0 env: GOOGLE_APPLICATION_CREDENTIALS: ${{ secrets.GOOGLE_APPLICATION_CREDENTIALS }} - with: - arguments: "--info :integration_tests:test --tests IntegrationTests.shouldMatchIosSuccessExitCodeAndPattern -Dflank-path=../test_runner/build/libs/flank.jar -Dyml-path=./src/test/resources/flank_ios.yml" + run: | + ./gradlew --info :integration_tests:test --tests IntegrationTests.shouldMatchIosSuccessExitCodeAndPattern -Dflank-path=../test_runner/build/libs/flank.jar -Dyml-path=./src/test/resources/flank_ios.yml diff --git a/README.md b/README.md index b2b2476831..387f86640c 100644 --- a/README.md +++ b/README.md @@ -7,4 +7,4 @@ Flank is YAML compatible with [the gcloud CLI](https://cloud.google.com/sdk/gclo ### Documentation is at [flank.github.io/flank](https://flank.github.io/flank/) -### Github action documentation is at [repository](https://github.com/Flank/flank/blob/master/docs/flank-github-action/store_documentation.md) +### GitHub action documentation is at [repository](https://github.com/Flank/flank/blob/master/docs/flank-github-action/store_documentation.md) diff --git a/action.yml b/action.yml index e9badbd35e..61fd3eb004 100644 --- a/action.yml +++ b/action.yml @@ -1,5 +1,5 @@ name: 'Flank' -description: 'Run Flank from Github actions!' +description: 'Run Flank from GitHub actions!' inputs: version: description: 'Flank version to run' diff --git a/check_version_updated/src/main/kotlin/com/github/flank/gradle/CheckVersionUpdated.kt b/check_version_updated/src/main/kotlin/com/github/flank/gradle/CheckVersionUpdated.kt index 825f8435f4..4f81280073 100644 --- a/check_version_updated/src/main/kotlin/com/github/flank/gradle/CheckVersionUpdated.kt +++ b/check_version_updated/src/main/kotlin/com/github/flank/gradle/CheckVersionUpdated.kt @@ -32,9 +32,9 @@ class CheckVersionUpdated : Plugin { val localResultsStream = execAndGetStdout("git", "diff", "origin/master", "HEAD", "--", "build.gradle.kts") .split("\n") - val commitedResultsStream = execAndGetStdout("git", "diff", "origin/master", "--", "build.gradle.kts") + val committedResultsStream = execAndGetStdout("git", "diff", "origin/master", "--", "build.gradle.kts") .split("\n") - return (commitedResultsStream + localResultsStream) + return (committedResultsStream + localResultsStream) .filter { it.startsWith("-version = ") || it.startsWith("+version = ") } .isNotEmpty() } diff --git a/check_version_updated/src/main/kotlin/com/github/flank/gradle/CheckVersionUpdatedTask.kt b/check_version_updated/src/main/kotlin/com/github/flank/gradle/CheckVersionUpdatedTask.kt index 9bb0ddb52e..13df7f6372 100644 --- a/check_version_updated/src/main/kotlin/com/github/flank/gradle/CheckVersionUpdatedTask.kt +++ b/check_version_updated/src/main/kotlin/com/github/flank/gradle/CheckVersionUpdatedTask.kt @@ -43,9 +43,9 @@ open class CheckVersionUpdatedTask : DefaultTask() { private fun Project.isVersionChangedInBuildGradle(): Boolean { val localResultsStream = execAndGetStdout("git", "diff", "origin/master", "HEAD", "--", "build.gradle.kts") .split("\n") - val commitedResultsStream = execAndGetStdout("git", "diff", "origin/master", "--", "build.gradle.kts") + val committedResultsStream = execAndGetStdout("git", "diff", "origin/master", "--", "build.gradle.kts") .split("\n") - return (commitedResultsStream + localResultsStream) + return (committedResultsStream + localResultsStream) .any { it.startsWith("-version = ") || it.startsWith("+version = ") } } diff --git a/contributing.md b/contributing.md index 1ee05a85b4..b1441314c8 100644 --- a/contributing.md +++ b/contributing.md @@ -27,7 +27,7 @@ There is a [`Debug.kt`](https://github.com/Flank/flank/blob/master/test_runner/s Note: The breakpoints will only hit for the actual command being run. For example, for `firebase test android run`, the debugger will directly enter [`AndroidRunCommand`](https://github.com/Flank/flank/blob/master/test_runner/src/main/kotlin/ftl/cli/firebase/test/android/AndroidRunCommand.kt). -The yml file being read is located [here](https://github.com/Flank/flank/blob/master/test_runner/flank.yml). +The yml file being read is located at [test_runner/flank.yml](https://github.com/Flank/flank/blob/master/test_runner/flank.yml). Run `./gradlew check` to fix lint issues @@ -35,8 +35,8 @@ Run `./gradlew check` to fix lint issues - Add property to `GcloudYml` and update `keys` in config files - Update `IArgs` with new property -- Update `AndroidArgs` to reference the propery and update `toString` -- Update `IosArgs` to reference the propery and `toString` +- Update `AndroidArgs` to reference the property and update `toString` +- Update `IosArgs` to reference the property and `toString` - Add test to `IosArgsTest` - Add test to `IosRunCommandTest` and update `empty_params_parse_null` test - Add test to `AndroidArgsTest` diff --git a/docs/bugs/872_error_when_parsing_Junit_raport_using_TeamCityCI.md b/docs/bugs/872_error_when_parsing_Junit_raport_using_TeamCityCI.md index 2da3ff16a0..e50d559962 100644 --- a/docs/bugs/872_error_when_parsing_Junit_raport_using_TeamCityCI.md +++ b/docs/bugs/872_error_when_parsing_Junit_raport_using_TeamCityCI.md @@ -178,7 +178,7 @@ But when user back to old configuration, he can still reproduce problem. #### Issue reported to TeamCity https://youtrack.jetbrains.com/issue/TW-66753 -TeamCity team cannot reproduce the problem, thay asked about additional logs, but User could deliver them in next week (starting 13-07-2020), until that we must wait. +TeamCity team cannot reproduce the problem, they asked about additional logs, but User could deliver them in next week (starting 13-07-2020), until that we must wait. diff --git a/docs/bugs/891-rate-limit-exceeded.md b/docs/bugs/891-rate-limit-exceeded.md index 2f83d5c81d..f97b49b5c4 100644 --- a/docs/bugs/891-rate-limit-exceeded.md +++ b/docs/bugs/891-rate-limit-exceeded.md @@ -202,7 +202,7 @@ forEach(test matrix) { } ``` -## API calls usage comparision table +## API calls usage comparison table Following table should compare API calls complexity. | | execution status updates | @@ -219,7 +219,7 @@ E - count of test executions in matrix scope ``` ## Conclusions -#### Gclud +#### Gcloud Because of single matrix run gives only 1 request per 6 seconds #### Flank v20.05.2 diff --git a/docs/bugs/993_multiple_identical_lines_printing.md b/docs/bugs/993_multiple_identical_lines_printing.md index b25f5c3b6e..c14e9a7335 100644 --- a/docs/bugs/993_multiple_identical_lines_printing.md +++ b/docs/bugs/993_multiple_identical_lines_printing.md @@ -21,4 +21,4 @@ It always executes on the same thread so it is not a concurrency issue - [X] on ```ExecutionStatusPrinter.kt``` -> ```MultiLinePrinter``` try to force add to output two same ExecutionStatus but no effect -- [X] on ```GcTestMatrix.kt``` -> ```refresh()``` try to add testSpecyfication with same id but without effect +- [X] on ```GcTestMatrix.kt``` -> ```refresh()``` try to add testSpecification with same id but without effect diff --git a/docs/bugs/null_no_tests_found.md b/docs/bugs/null_no_tests_found.md index ef5a5d257f..8a6a278c94 100644 --- a/docs/bugs/null_no_tests_found.md +++ b/docs/bugs/null_no_tests_found.md @@ -80,7 +80,7 @@ gcloud: use-orchestrator: true ``` -## Reported flade config +## Reported fladle config ```groovy fladle { serviceAccountCredentials = file("pathToCredentials") @@ -120,4 +120,4 @@ fladle { * Create multi-module project which will provide many test apks and try to reproduce issue. * Ensure that our knowledge about issue in `What we know from report issue` is correct. * Based on: https://stackoverflow.com/questions/39241640/android-instrumented-test-no-tests-found try to make real multi dex app and try trun tests on it -* Play with @BefeoreClass and @Before annotations (exception on @BeforeClass produce null without test cases on test-lab). +* Play with @BeforeClass and @Before annotations (exception on @BeforeClass produce null without test cases on test-lab). diff --git a/docs/building_updating_flank.md b/docs/building_updating_flank.md index 9e75436925..b97351e2e8 100644 --- a/docs/building_updating_flank.md +++ b/docs/building_updating_flank.md @@ -1,5 +1,5 @@ # Building and Updating Flank -Ensure that all steps taken for contributing and building Flank have been followed, which are found [here](../README.md) +Ensure that you have followed all steps for [contributing and building Flank](../README.md) ## Building an updated flank To build an updated version of flank from source simply run (This assumes you are in the root Flank directory) diff --git a/docs/client_generation.md b/docs/client_generation.md index 8232ce20d3..7209beceb3 100644 --- a/docs/client_generation.md +++ b/docs/client_generation.md @@ -14,7 +14,7 @@ Google API clients (`google-api-*-client`) - Low level - Auto generated - Made for JSON REST APIs -- Older project - [maintence mode](https://github.com/GoogleCloudPlatform/google-cloud-ruby/issues/1604#issuecomment-316834237) +- Older project - [maintenance mode](https://github.com/GoogleCloudPlatform/google-cloud-ruby/issues/1604#issuecomment-316834237) Google APIs toolkit (`googleapis/toolkit`) - Low level @@ -36,7 +36,7 @@ Google Cloud libraries (`google-cloud-*`) - [google-api-go-client](https://github.com/google/google-api-go-client) - [google-api-go-generator](https://github.com/google/google-api-go-client/tree/master/google-api-go-generator) - [google-api-java-client](https://github.com/google/google-api-java-client) -- [google-api-javascript-client](https://github.com/google/google-api-javascript-client) - not offically [marked as maintence,](https://github.com/google/google-api-javascript-client/issues/320) however no new updates since May 2017. +- [google-api-javascript-client](https://github.com/google/google-api-javascript-client) - not officially [marked as maintenance,](https://github.com/google/google-api-javascript-client/issues/320) however no new updates since May 2017. - [google-api-dotnet-client](https://github.com/google/google-api-dotnet-client) - [google-api-objectivec-client](https://github.com/google/google-api-objectivec-client) - Deprecated. Replaced entirely by [google-api-objectivec-client-for-rest](https://github.com/google/google-api-objectivec-client-for-rest) diff --git a/docs/dependencies_update_process.md b/docs/dependencies_update_process.md index 91b51216c3..16aa124f31 100644 --- a/docs/dependencies_update_process.md +++ b/docs/dependencies_update_process.md @@ -6,7 +6,7 @@ Process run commands and update files with defined versions in the provided file ### Modules 0. [Gradle Versions Plugin](https://github.com/ben-manes/gradle-versions-plugin) which check dependencies version and generate report 0. [Command](../flank-scripts/README.md#dependencies) in `flank-scripts` which update dependencies versions -0. Github action job which runs dependencies check every Monday at 5 AM UTC or on-demand +0. GitHub action job which runs dependencies check every Monday at 5 AM UTC or on-demand ## Usage @@ -15,8 +15,8 @@ Process run commands and update files with defined versions in the provided file 0. Build flank scripts using script `./flank-scripts/bash/buildFlankScripts.sh` 0. Run `./flank-scripts/bash/flankScripts dependencies update` -### Github action -Run `Update dependencies` job using [Github action menu](https://github.com/Flank/flank/actions) by clicking `Run workflow` button +### GitHub action +Run `Update dependencies` job using [GitHub action menu](https://github.com/Flank/flank/actions) by clicking `Run workflow` button ## Merging to master diff --git a/docs/feature/summary_output.md b/docs/feature/summary_output.md index 9a246bb00f..97fa3bb514 100644 --- a/docs/feature/summary_output.md +++ b/docs/feature/summary_output.md @@ -1,4 +1,4 @@ -# Formatted summary output +# Formatted summary output ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ OUTCOME β”‚ MATRIX ID β”‚ TEST AXIS VALUE β”‚ TEST DETAILS β”‚ @@ -16,24 +16,29 @@ As a user I want to see finely formatted summary result at the end of execution Gcloud prints summary output in the table. It looks nice and is readable. Why we wouldn't have same in flank? ## Possible outputs -Numbers are representing `OUTCOME` column, points are representing `TEST DETAILS` column. -1. `success | flaky` - * `${1} test cases passed | ${2} skipped | ${3} flakes | (Native crash) | ---` -2. `failure` - * `${1} test cases failed | ${2} errors | ${3} passed | ${4} skipped | ${4} flakes | (Native crash)` - * `Application crashed | (Native crash)` - * `Test timed out | (Native crash)` - * `App failed to install | (Native crash)` - * `Unknown failure | (Native crash)` -3. `inconclusive` - * `Infrastructure failure` - * `Test run aborted by user` - * `Unknown reason` -4. `skipped` - * `Incompatible device/OS combination` - * `App does not support the device architecture` - * `App does not support the OS version` - * `Unknown reason` +Numbers represent the `OUTCOME` column, and bullet points represent the `TEST DETAILS` column. + +1. success | flaky + - `${1} test cases passed | ${2} skipped | ${3} flakes | (Native crash) | ---` + +2. failure + - `${1} test cases failed | ${2} errors | ${3} passed | ${4} skipped | ${4} flakes | (Native crash)` + - `Application crashed | (Native crash)` + - `Test timed out | (Native crash)` + - `App failed to install | (Native crash)` + - `Unknown failure | (Native crash)` + +3. inconclusive + - `Infrastructure failure` + - `Test run aborted by user` + - `Unknown reason` + +4. skipped + - `Incompatible device/OS combination` + - `App does not support the device architecture` + - `App does not support the OS version` + - `Unknown reason` + ## Implementation details @@ -67,7 +72,7 @@ Gcloud is using following API calls 2. `self._client.projects_histories_executions_steps.List(request)` The first one is default, but if returns any `environment` without `environmentResult.outcome`, the second one will be used to obtain `steps`. -Both `environemnts` and `steps` can provide `outcome`. The difference between them is the `steps` returns `success` event if tests are `flaky`. +Both `environments` and `steps` can provide `outcome`. The difference between them is the `steps` returns `success` event if tests are `flaky`. Currently, we don't know why `self._client.projects_histories_executions_environments.List(request)` may return empty `environmentResult.outcome`. In difference to gcloud flank uses 3 api call to obtain necessary data diff --git a/docs/flank-github-action/flank_github_acton_sdd.md b/docs/flank-github-action/flank_github_acton_sdd.md index 7c8661e4ae..0da1764a8e 100644 --- a/docs/flank-github-action/flank_github_acton_sdd.md +++ b/docs/flank-github-action/flank_github_acton_sdd.md @@ -1,10 +1,10 @@ -# Flank Github action +# Flank GitHub action -Add Github action which allows running Flank +Add GitHub action which allows running Flank # References -- [Github actions documentation](https://github.com/features/actions) +- [GitHub actions documentation](https://github.com/features/actions) - [Creating a Docker container action](https://docs.github.com/en/actions/creating-actions/creating-a-docker-container-action) @@ -12,15 +12,15 @@ Add Github action which allows running Flank - [Creating a composite run steps action](https://docs.github.com/en/actions/creating-actions/creating-a-composite-run-steps-action) -- [Github actions marketplace](https://github.com/marketplace?type=actions) +- [GitHub actions marketplace](https://github.com/marketplace?type=actions) # Motivation -Bitrise and Circle CI have steps in their CIs to run Flank. As Github is a widely used code repository and Github actions become more and more popular there should be also Github action that allows running Flank. +Bitrise and Circle CI have steps in their CIs to run Flank. As GitHub is a widely used code repository and GitHub actions become more and more popular there should be also GitHub action that allows running Flank. -After creating Github action, Flank could reach more users. +After creating GitHub action, Flank could reach more users. # Goals @@ -30,7 +30,7 @@ After creating Github action, Flank could reach more users. # Design -There should be a possibility to specify all flank options using Github action variables as input, as well as passing the configuration itself. +There should be a possibility to specify all flank options using GitHub action variables as input, as well as passing the configuration itself. User must provide at least: @@ -41,13 +41,13 @@ User must provide at least: # API -Flank Github action will be developed using [composite run steps action](https://docs.github.com/en/actions/creating-actions/creating-a-composite-run-steps-action) which just packs other actions and runs it as a single action. +Flank GitHub action will be developed using [composite run steps action](https://docs.github.com/en/actions/creating-actions/creating-a-composite-run-steps-action) which just packs other actions and runs it as a single action. ### Design proposal ```yaml name: 'Flank' -description: 'Run Flank from Github actions!' +description: 'Run Flank from GitHub actions!' inputs: version: description: 'Version of flank to run' @@ -80,10 +80,10 @@ runs: run: shell: bash - id: validate configuration - run: + run: shell: bash - id: run flank - run: + run: shell: bash - id: report run: @@ -143,7 +143,7 @@ jobs: # Results -After finishing Flank GitHub actions should be published to [Github actions marketplace](https://github.com/marketplace?type=actions). +After finishing Flank GitHub actions should be published to [GitHub actions marketplace](https://github.com/marketplace?type=actions). There should be also an announcement on Flank channel on Slack. @@ -151,7 +151,7 @@ The thing to consider is also using it for our internal verification together wi # Dependencies -Github action needs to have `action.yml` file in the root of the repository, however, Flank repository has the file for posting Slack message after release. However it is only used by Flank team, so it will be best to move it as a side repository and keep the main Flank action in Flank's mono repository +GitHub action needs to have `action.yml` file in the root of the repository, however, Flank repository has the file for posting Slack message after release. However it is only used by Flank team, so it will be best to move it as a side repository and keep the main Flank action in Flank's mono repository # Testing diff --git a/docs/flank-github-action/store_documentation.md b/docs/flank-github-action/store_documentation.md index 81a8909bc6..66fd242d7c 100644 --- a/docs/flank-github-action/store_documentation.md +++ b/docs/flank-github-action/store_documentation.md @@ -1,6 +1,6 @@ ## Action -This Github action allows for running Flank as a Github workflow. +This GitHub action allows for running Flank as a GitHub workflow. Documentation for Flank is at [flank.github.io/flank](https://flank.github.io/flank/) diff --git a/docs/flank-output-investigation/flank_output_propositon.md b/docs/flank-output-investigation/flank_output_proposition.md similarity index 100% rename from docs/flank-output-investigation/flank_output_propositon.md rename to docs/flank-output-investigation/flank_output_proposition.md diff --git a/docs/flank-scripts/README.md b/docs/flank-scripts/README.md index 857e59dc33..2a926586f0 100644 --- a/docs/flank-scripts/README.md +++ b/docs/flank-scripts/README.md @@ -8,7 +8,7 @@ This repository contains helper scripts for developing flank. For now, it contai To build flank-scripts: - Run script `buildFlankScripts.sh` in `flank-scripts/bash/` directory - Run command `./gradlew clean flank-scripts:assemble flank-scripts:shadowJar` and manual copy file from `/flank-scripts/build/libs/flank-scripts.jar` to `flank-scripts/bash/` - - You could always run/build it from Intellij IDEA + - You could always run/build it from IntelliJ IDEA ### Usage @@ -53,11 +53,11 @@ ___ ___ -- `github` - Group of command for managing Github integration +- `github` - Group of command for managing GitHub integration - `copy_issue_properties` - Copy properties(assignees, story points, labels) from issue to pull request - `delete_old_tag` - Delete old tag on GitHub - `delete_release` - Delete old release on github - - `make_release` - Make new Github release + - `make_release` - Make new GitHub release ___ diff --git a/docs/flank-scripts/command_overview.md b/docs/flank-scripts/command_overview.md index ba7721fa98..80092a5ba4 100644 --- a/docs/flank-scripts/command_overview.md +++ b/docs/flank-scripts/command_overview.md @@ -35,11 +35,11 @@ ___ ___ -- `github` - Group of command for managing Github integration +- `github` - Group of command for managing GitHub integration - `copy_issue_properties` - Copy properties(assignees, story points, labels) from issue to pull request - `delete_old_tag` - Delete old tag on GitHub - `delete_release` - Delete old release on github - - `make_release` - Make new Github release + - `make_release` - Make new GitHub release - `download_flank` - Downloads flank.jar with selected version. ___ diff --git a/docs/flank_corellium.md b/docs/flank_corellium.md index b61f39d3bb..b6cf75c0a5 100644 --- a/docs/flank_corellium.md +++ b/docs/flank_corellium.md @@ -6,7 +6,7 @@ Run mobile tests in parallel on virtual devices driven by Corellium backend. The Flank - Corellium integration is at the MVP stage, so only the core and most important features are available. -[Read more](https://github.com/sparkrnyc/sparkr_general_docs/wiki/What-are-Prototype,-POC,-Alpha,-Beta-and-MVP#minimum-viable-product-mvp) about Minimum Viable Product. +Read more about [Minimum Viable Product](https://github.com/sparkrnyc/sparkr_general_docs/wiki/What-are-Prototype,-POC,-Alpha,-Beta-and-MVP#minimum-viable-product-mvp). ## Supported API levels diff --git a/docs/flutter_status.md b/docs/flutter_status.md index daa25687bb..b8f645527c 100644 --- a/docs/flutter_status.md +++ b/docs/flutter_status.md @@ -69,7 +69,7 @@ The result is different from expected behaviour. Using this option you can specify shards targets by: -* `metod` - test method name +* `method` - test method name * `class` - test class name * `package` - test package name * `annotation` @@ -167,7 +167,7 @@ The gcloud can run tests by class or package if there are exists in test apk as This option works similar to Using this option you can filter test cases for running only the specified units: -* `metod` - test method name +* `method` - test method name * `class` - test class name * `package` - test package name * `annotation` @@ -290,7 +290,7 @@ even with option ```disable-sharding```. This behaviour probably could be fixed ## How to create flutter tests for firebase -You can find Flutter Integration test plugin documentation with example [here](https://pub.dev/packages/integration_test). +See the [Flutter Integration test plugin documentation with example](https://pub.dev/packages/integration_test). ### Android side diff --git a/docs/gcloud/google_api_usecases.md b/docs/gcloud/google_api_usecases.md index 165acecaaf..fb5130eb41 100644 --- a/docs/gcloud/google_api_usecases.md +++ b/docs/gcloud/google_api_usecases.md @@ -31,7 +31,7 @@ 1. AndroidModelDescription.kt 1. AndroidSoftwareVersionDescription.kt 1. ListAndroidDevices.kt -1. ListAndroidSofwareVersions.kt +1. ListAndroidSoftwareVersions.kt ## ftl.environment.common @@ -44,7 +44,7 @@ 1. IosModelDescription.kt 1. IosSoftwareVersionDescription.kt 1. ListIOsDevices.kt -1. ListIOsSofwareVersions.kt +1. ListIOsSoftwareVersions.kt ## ftl.gc @@ -199,12 +199,12 @@ 1. AndroidModelDescription.kt 1. AndroidSoftwareVersionDescription.kt 1. ListAndroidDevices.kt -1. ListAndroidSofwareVersions.kt +1. ListAndroidSoftwareVersions.kt 1. IosModelDescription.kt 1. IosSoftwareVersionDescription.kt 1. ListIOsDevices.kt -1. ListIOsSofwareVersions.kt +1. ListIOsSoftwareVersions.kt ## Android Run use case diff --git a/docs/hld/architecture-template.puml b/docs/hld/architecture-template.puml index 2a2fb6cbc3..e7ff4e7427 100644 --- a/docs/hld/architecture-template.puml +++ b/docs/hld/architecture-template.puml @@ -38,7 +38,7 @@ package client { [User interface] -up-> [Public functions] [Internal logic] <- [Public functions] [Internal logic] --> Interfaces -[Document parser] -> [Third-party serializator] +[Document parser] -> [Third-party serializer] [Complicated calculations] <-down-- [Internal logic] [Structures generator] <-down- [Internal logic] [Document parser] <-down- [Internal logic] diff --git a/docs/host_binaries_solutions_comparison.md b/docs/host_binaries_solutions_comparison.md index 422adc3c82..bb43a8f494 100644 --- a/docs/host_binaries_solutions_comparison.md +++ b/docs/host_binaries_solutions_comparison.md @@ -2,7 +2,7 @@ ## git-lfs -Docs can be found [here](https://git-lfs.github.com) +Docs can be found at [git-lfs.github.com](https://git-lfs.github.com) ### Costs @@ -64,7 +64,7 @@ There is nothing to configure. When you modify files on branch changes not shown ## git-submodules -Docs can be found [here](https://gist.github.com/gitaarik/8735255) +Docs can be found at [gist.github.com/gitaarik/8735255](https://gist.github.com/gitaarik/8735255) ### Is git submodules versioning files? @@ -114,8 +114,8 @@ https://stackoverflow.com/questions/9189575/git-submodule-tracking-latest ## git-annex -Docs can be found [here](https://git-annex.branchable.com/git-annex/) -Docs for github [here](https://git-annex.branchable.com/tips/centralized_git_repository_tutorial/on_GitHub/) +Docs can be found at [git-annex](https://git-annex.branchable.com/git-annex/) +Docs for [github at git-annex](https://git-annex.branchable.com/tips/centralized_git_repository_tutorial/on_GitHub/) We can configure git-annex to store files in places like ftp, amazon s3, etc. Probably it can reduce costs on many large files. [link](https://git-annex.branchable.com/special_remotes/) @@ -157,9 +157,9 @@ Git diff looks like: ``` - If you don't have brew installed. Install it from [this page](https://brew.sh) + If you don't have brew installed. Install it from [brew.sh](https://brew.sh) - Installing on other systems can be found [here](https://git-annex.branchable.com/install/) + Installing on other systems can be found at [git-annex install](https://git-annex.branchable.com/install/) 2. Initialize @@ -212,7 +212,7 @@ Git-annex allows to host binary files in different locations, after a little dis This list is only our idea feel free to suggest another one. -All of the supported storage types can be [here](https://git-annex.branchable.com/special_remotes/) +All of the supported storage types can be seen at [git-annex special_remotes](https://git-annex.branchable.com/special_remotes/) ### How to play with branches @@ -220,8 +220,8 @@ When you change branch you can override file and commit changes (remember to unl ### How to configure new git-annex repository with google drive -1. Install rclone from [here](https://downloads.rclone.org/v1.37/) -2. Install git-annex-rclone from [here](https://github.com/DanielDent/git-annex-remote-rclone) +1. Install rclone from [downloads.rclone.org](https://downloads.rclone.org/v1.37/) +2. Install git-annex-rclone from [git-annex-remote-rclone](https://github.com/DanielDent/git-annex-remote-rclone) 3. Go to repository directory and in console enter `rclone config` 4. Init remote by `git annex initremote CONFIG_NAME type=external externaltype=rclone target=CONFIG_NAME prefix=git-annex chunk=50MiB encryption=shared mac=HMACSHA512 rclone_layout=lower` 5. You can test remote by `git annex testremote` diff --git a/docs/hypershard_android.md b/docs/hypershard_android.md index b65a952203..f6da66022b 100644 --- a/docs/hypershard_android.md +++ b/docs/hypershard_android.md @@ -12,7 +12,7 @@ More information on this can be found at the official library: [Hypershard-andro 1. Releases can be found downloaded from [Maven Central](https://search.maven.org/search?q=g:com.dropbox.mobile.hypershard) 1. Ensure that you download the correct suffixed as follows `*-all.jar` library -2. Alternatively cloning the repository found [here](https://github.com/dropbox/hypershard-android) +2. Alternatively cloning the repository [github.com/dropbox/hypershard-android](https://github.com/dropbox/hypershard-android) 1. Then running `./gradlew install` will produce a valid jarfile in the build directory. ### Running @@ -44,7 +44,7 @@ More information on this can be found at the official library: [Hypershard-andro dirs Dir(s) to process. The location of the test classes to parse ``` -3. An example run of hypershard for flank where the the current directory is flank root: +3. An example run of hypershard for flank where the current directory is flank root: ```bash >java -jar hypershard-1.1.2-all.jar ./test_runner/src/test/kotlin/ftl/reports/util/ diff --git a/docs/hypershard_ios.md b/docs/hypershard_ios.md index ad5fbdb171..e2976f7374 100644 --- a/docs/hypershard_ios.md +++ b/docs/hypershard_ios.md @@ -4,10 +4,10 @@ This is a step-by-step guide of using Hypershard for companies that are unable t ### Installation -1. Clone Github repository using +1. Clone GitHub repository using 1. https - `git clone https://github.com/dropbox/hypershard-ios.git` 2. SSH - `git clone git@github.com:dropbox/hypershard-ios.git` - 3. Github CLI - `gh repo clone dropbox/hypershard-ios` + 3. GitHub CLI - `gh repo clone dropbox/hypershard-ios` 2. Install swift if you are not using macOS 1. https://swift.org/download/#releases 3. Open Terminal/cmd diff --git a/docs/instrumentation_tests.md b/docs/instrumentation_tests.md index c5e14a880d..20760c04ec 100644 --- a/docs/instrumentation_tests.md +++ b/docs/instrumentation_tests.md @@ -13,7 +13,7 @@ Tests can be run with Gradle wrapper and parametrized by command-line arguments 2. for android ```firebase, test, ios, run``` 4. ```working-directory``` optional parameter for set working directory default is: ```./``` 5. ```output-pattern``` optional parameter for set regex to compare output -6. ```expected-output-code``` optional parameter for for veryfi output code default: 0 +6. ```expected-output-code``` optional parameter for verify output code default: 0 ## Example of run android test diff --git a/docs/onboarding/1_environment_setup.md b/docs/onboarding/1_environment_setup.md index 3659a19ffd..f739be82dd 100644 --- a/docs/onboarding/1_environment_setup.md +++ b/docs/onboarding/1_environment_setup.md @@ -16,7 +16,7 @@ export PATH=$PATH:$HOME/Library/Python/2.7/bin #export PATH=$PATH:$HOME/"path to your local gcloud repository"/gcloud_cli/google-cloud-sdk/bin export FLANK_PROJECT_ID=ftl-flank-open-source export GOOGLE_CLOUD_PROJECT=ftl-flank-open-source -export GITHUB_TOKEN="type your gihub token here" +export GITHUB_TOKEN="type your github token here" ``` ### Common @@ -26,7 +26,7 @@ export GITHUB_TOKEN="type your gihub token here" 1. Ask for access to test bucket on a google cloud platform 1. Install [Oracle JDK 8](https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html) * Unfortunately there is no official way to download installer without a login account. - * Unfortunately unofficial instruction from [here](https://gist.github.com/wavezhang/ba8425f24a968ec9b2a8619d7c2d86a6) sometimes isn't working. + * Unfortunately unofficial instruction from [wavezhang](https://gist.github.com/wavezhang/ba8425f24a968ec9b2a8619d7c2d86a6) sometimes isn't working. 1. Use [JetBrains Toolbox](https://www.jetbrains.com/toolbox-app/) to install IDE. 1. Install JetBrains Toolbox * download from [website](https://www.jetbrains.com/toolbox-app/) diff --git a/docs/onboarding/5_code_review.md b/docs/onboarding/5_code_review.md index 70c8e7e402..0ffd383444 100644 --- a/docs/onboarding/5_code_review.md +++ b/docs/onboarding/5_code_review.md @@ -24,7 +24,7 @@ formalized and described below. If any step above will fail for you, try to reproduce it for sure and notify about a faced problem using pull request comment. Additionally, you may attach any of: -- Github `commitable` suggestion if possible, and you already know it. +- GitHub `commitable` suggestion if possible, and you already know it. - Description of what is unclear for you. - Description of what should be changed or what is missing. - Any additional information important for final quality. diff --git a/docs/refactor/investigation.md b/docs/refactor/investigation.md index 487f192793..14650e7930 100644 --- a/docs/refactor/investigation.md +++ b/docs/refactor/investigation.md @@ -141,7 +141,7 @@ Based on [google_api_usecases](../gcloud/google_api_usecases.md) * AndroidModelDescription.kt $ * AndroidSoftwareVersionDescription.kt $ * ListAndroidDevices.kt $ - * ListAndroidSofwareVersions.kt $ + * ListAndroidSoftwareVersions.kt $ 1. ftl.environment.common * ListNetworkConfiguration.kt $ * ListOrientations.kt $ @@ -150,7 +150,7 @@ Based on [google_api_usecases](../gcloud/google_api_usecases.md) * IosModelDescription.kt $ * IosSoftwareVersionDescription.kt $ * ListIOsDevices.kt $ - * ListIOsSofwareVersions.kt $ + * ListIOsSoftwareVersions.kt $ 1. ftl.gc * GcAndroidDevice.kt $ * GcAndroidTestMatrix.kt diff --git a/docs/release_process.md b/docs/release_process.md index 900a9595bf..fe36085fa6 100644 --- a/docs/release_process.md +++ b/docs/release_process.md @@ -5,7 +5,7 @@ 1. A release process should be run withing macOS environment 2. The machine should contain: `homebrew` - Package manager - `gh` - Github CLI tool + `gh` - GitHub CLI tool ## Current setup @@ -19,7 +19,7 @@ Each push: ## Triggering release ### Manually -1. Navigate to [Github Actions](https://github.com/Flank/flank/actions) +1. Navigate to [GitHub Actions](https://github.com/Flank/flank/actions) 2. Run job [`Generate release notes for next commit`](https://github.com/Flank/flank/actions?query=workflow%3A%22Generate+release+notes+for+next+commit%22) by using `Run Workflow` button 3. After merging PR, the next tag will be pushed to repository 4. Wait for CI job to finish diff --git a/docs/test_sharding.md b/docs/test_sharding.md index 79fac2bb7a..bc9b848dfe 100644 --- a/docs/test_sharding.md +++ b/docs/test_sharding.md @@ -32,7 +32,7 @@ The [gcloud CLI][gcloud_cli] supports two types of sharding, uniform sharding an [--num-uniform-shards][test_targets_for_shards] is translated to β€œ-e numShard” β€œ-e shardIndex” [AndroidJUnitRunner][ajur] arguments. This uses the native `adb am instrument` sharding feature which randomly shards all tests. When using uniform shards, it's possible to have shards with empty tests. -Firebase will mark shards as failed when execution consists of skipped/empty tests, as this is likely an indication the tests are not configured correctly. This firebase design choice is incompatable with num-uniform-shards as you will randomly get failures when shards are empty. Using num-uniform-shards is therefor not recommended. +Firebase will mark shards as failed when execution consists of skipped/empty tests, as this is likely an indication the tests are not configured correctly. This firebase design choice is incompatible with num-uniform-shards as you will randomly get failures when shards are empty. Using num-uniform-shards is therefor not recommended. [--test-targets-for-shard][test_targets_for_shards] allows manually specifying tests to be run. diff --git a/docs/update_gradle.md b/docs/update_gradle.md index d6c24261c7..758cd02314 100644 --- a/docs/update_gradle.md +++ b/docs/update_gradle.md @@ -7,7 +7,7 @@ > gradle wrapper --distribution-type all -Specifiy the gradle distribution type in `build.gradle`: +Specify the gradle distribution type in `build.gradle`: ``` wrapper { distributionType = Wrapper.DistributionType.ALL diff --git a/docs/windows_and_github_actions.md b/docs/windows_and_github_actions.md index d8ebc4306d..2860fa01f3 100644 --- a/docs/windows_and_github_actions.md +++ b/docs/windows_and_github_actions.md @@ -1,4 +1,4 @@ -# Working with Windows on Github actions +# Working with Windows on GitHub actions ## Differences between system property user.home and environment variable HOMEPATH diff --git a/flank-scripts/src/main/kotlin/flank/scripts/cli/github/GitHubCommand.kt b/flank-scripts/src/main/kotlin/flank/scripts/cli/github/GitHubCommand.kt index 509cb7b3b0..a1e5ac78e6 100644 --- a/flank-scripts/src/main/kotlin/flank/scripts/cli/github/GitHubCommand.kt +++ b/flank-scripts/src/main/kotlin/flank/scripts/cli/github/GitHubCommand.kt @@ -5,7 +5,7 @@ import com.github.ajalt.clikt.core.subcommands object GitHubCommand : CliktCommand( name = "github", - help = "Group of command for managing Github integration" + help = "Group of command for managing GitHub integration" ) { init { subcommands( diff --git a/flank-scripts/src/main/kotlin/flank/scripts/cli/github/MakeReleaseCommand.kt b/flank-scripts/src/main/kotlin/flank/scripts/cli/github/MakeReleaseCommand.kt index 54d2d520c7..48452113d4 100644 --- a/flank-scripts/src/main/kotlin/flank/scripts/cli/github/MakeReleaseCommand.kt +++ b/flank-scripts/src/main/kotlin/flank/scripts/cli/github/MakeReleaseCommand.kt @@ -11,7 +11,7 @@ import kotlin.system.exitProcess object MakeReleaseCommand : CliktCommand( name = "make_release", - help = "Make new Github release" + help = "Make new GitHub release" ) { private val inputFile by option(help = "Path to release file") .path(mustExist = true).required() diff --git a/flank-scripts/src/main/kotlin/flank/scripts/data/github/commons/LastWorkflowRunDate.kt b/flank-scripts/src/main/kotlin/flank/scripts/data/github/commons/LastWorkflowRunDate.kt index 08ae72f189..5e12cb2e24 100644 --- a/flank-scripts/src/main/kotlin/flank/scripts/data/github/commons/LastWorkflowRunDate.kt +++ b/flank-scripts/src/main/kotlin/flank/scripts/data/github/commons/LastWorkflowRunDate.kt @@ -14,7 +14,7 @@ suspend fun getLastWorkflowRunDate( githubToken = token, workflow = requireNotNull( workflowName ?: workflowFileName - ) { "** Missing either workflow name or workflow file name. Both can not be null" }, + ) { "** Missing either workflow name or workflow file name. Both cannot be null" }, parameters = listOf( "per_page" to 20, "page" to 1 diff --git a/flank-scripts/src/main/kotlin/flank/scripts/ops/updatebinaries/UpdateSwift.kt b/flank-scripts/src/main/kotlin/flank/scripts/ops/updatebinaries/UpdateSwift.kt index b74b0c34bc..61de461d50 100644 --- a/flank-scripts/src/main/kotlin/flank/scripts/ops/updatebinaries/UpdateSwift.kt +++ b/flank-scripts/src/main/kotlin/flank/scripts/ops/updatebinaries/UpdateSwift.kt @@ -44,14 +44,14 @@ private fun findAndCopySwiftLicense() { } private fun findAndCopySwiftDemangleFile() { - val switftDemangleFileSuffix = Paths.get("usr", "bin", "swift-demangle").toString() + val swiftDemangleFileSuffix = Paths.get("usr", "bin", "swift-demangle").toString() - val switftDemangleOutputFile = Paths.get(currentPath.toString(), "swift-demangle").toFile() + val swiftDemangleOutputFile = Paths.get(currentPath.toString(), "swift-demangle").toFile() println("Copying swift-demangle ...") Files.walk(swiftPath) - .filter { it.toString().endsWith(switftDemangleFileSuffix) } + .filter { it.toString().endsWith(swiftDemangleFileSuffix) } .findFirst() .takeIf { it.isPresent } - ?.run { get().toFile().copyTo(switftDemangleOutputFile, overwrite = true) } + ?.run { get().toFile().copyTo(swiftDemangleOutputFile, overwrite = true) } } diff --git a/flank-scripts/src/test/kotlin/flank/scripts/cli/release/MakeReleaseCommandTest.kt b/flank-scripts/src/test/kotlin/flank/scripts/cli/release/MakeReleaseCommandTest.kt index b2b225c019..ec43d7d8e4 100644 --- a/flank-scripts/src/test/kotlin/flank/scripts/cli/release/MakeReleaseCommandTest.kt +++ b/flank-scripts/src/test/kotlin/flank/scripts/cli/release/MakeReleaseCommandTest.kt @@ -33,7 +33,7 @@ class MakeReleaseCommandTest { } @Test - fun `Should return successfully run release for snasphot`() { + fun `Should return successfully run release for snapshot`() { // given mockkStatic("flank.scripts.ops.github.ReleaseFlankKt") every { releaseFlank(any(), any(), any(), any(), any()) } returns 0 diff --git a/flank-scripts/src/test/kotlin/flank/scripts/ops/common/ConventionalCommitFormatterTest.kt b/flank-scripts/src/test/kotlin/flank/scripts/ops/common/ConventionalCommitFormatterTest.kt index 5a8f6f5277..831910fa0e 100644 --- a/flank-scripts/src/test/kotlin/flank/scripts/ops/common/ConventionalCommitFormatterTest.kt +++ b/flank-scripts/src/test/kotlin/flank/scripts/ops/common/ConventionalCommitFormatterTest.kt @@ -19,7 +19,7 @@ class ConventionalCommitFormatterTest( arrayOf("feat: Sample", "Features", "Sample"), arrayOf("fix: Bug", "Bug Fixes", "Bug"), arrayOf("docs: New", "Documentation", "New"), - arrayOf("refactor: Eveerything", "Refactor", "Eveerything"), + arrayOf("refactor: Everything", "Refactor", "Everything"), arrayOf("ci(cd): actions", "CI Changes", "Actions"), arrayOf("test(ios): update", "Tests update", "Update"), arrayOf("perf!: 10%", "Performance upgrade", "10%"), diff --git a/integration_tests/src/test/kotlin/TestParameters.kt b/integration_tests/src/test/kotlin/TestParameters.kt index 9f426ed79c..007b1f4473 100644 --- a/integration_tests/src/test/kotlin/TestParameters.kt +++ b/integration_tests/src/test/kotlin/TestParameters.kt @@ -30,7 +30,7 @@ private fun Map.withDefault(outputPattern: String, runParams: Li getPropertyAsList("run-params", runParams), ) -fun Map.getOrValueIfEmpty(key: String, defaut: String) = get(key).orEmpty().let { - if (it.isBlank()) defaut +fun Map.getOrValueIfEmpty(key: String, default: String) = get(key).orEmpty().let { + if (it.isBlank()) default else it } diff --git a/integration_tests/src/test/kotlin/utils/IntergrationTestsUtils.kt b/integration_tests/src/test/kotlin/utils/IntegrationTestsUtils.kt similarity index 100% rename from integration_tests/src/test/kotlin/utils/IntergrationTestsUtils.kt rename to integration_tests/src/test/kotlin/utils/IntegrationTestsUtils.kt diff --git a/junit_html_report/kotlin_integration.md b/junit_html_report/kotlin_integration.md index 669c4d53d6..c711516811 100644 --- a/junit_html_report/kotlin_integration.md +++ b/junit_html_report/kotlin_integration.md @@ -10,7 +10,7 @@ group: item: `=[{key:"item-0",...]` -Regex search & replace with seralized JSON +Regex search & replace with serialized JSON Group format: ```javascript diff --git a/junit_html_report/package-lock.json b/junit_html_report/package-lock.json index 0a1b420f20..a2508c2643 100644 --- a/junit_html_report/package-lock.json +++ b/junit_html_report/package-lock.json @@ -1179,9 +1179,9 @@ } }, "node_modules/body-parser": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", - "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", "dev": true, "dependencies": { "bytes": "3.1.2", @@ -1192,7 +1192,7 @@ "http-errors": "2.0.0", "iconv-lite": "0.4.24", "on-finished": "2.4.1", - "qs": "6.11.0", + "qs": "6.13.0", "raw-body": "2.5.2", "type-is": "~1.6.18", "unpipe": "1.0.0" @@ -1408,13 +1408,22 @@ } }, "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "dev": true, "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/camel-case": { @@ -2013,6 +2022,23 @@ "node": ">= 10" } }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/define-lazy-prop": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", @@ -2168,9 +2194,9 @@ } }, "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", "dev": true, "engines": { "node": ">= 0.8" @@ -2294,6 +2320,27 @@ "node": ">= 0.4" } }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-module-lexer": { "version": "1.5.4", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", @@ -2429,37 +2476,37 @@ } }, "node_modules/express": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", - "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.0.tgz", + "integrity": "sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng==", "dev": true, "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.2", + "body-parser": "1.20.3", "content-disposition": "0.5.4", "content-type": "~1.0.4", "cookie": "0.6.0", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "1.2.0", + "finalhandler": "1.3.1", "fresh": "0.5.2", "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", + "merge-descriptors": "1.0.3", "methods": "~1.1.2", "on-finished": "2.4.1", "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", + "path-to-regexp": "0.1.10", "proxy-addr": "~2.0.7", - "qs": "6.11.0", + "qs": "6.13.0", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", + "send": "0.19.0", + "serve-static": "1.16.2", "setprototypeof": "1.2.0", "statuses": "2.0.1", "type-is": "~1.6.18", @@ -2566,13 +2613,13 @@ } }, "node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", "dev": true, "dependencies": { "debug": "2.6.9", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "on-finished": "2.4.1", "parseurl": "~1.3.3", @@ -2727,10 +2774,13 @@ } }, "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/gauge": { "version": "4.0.4", @@ -2794,14 +2844,22 @@ } }, "node_modules/get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "dev": true, "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/get-stdin": { @@ -2874,6 +2932,18 @@ "node": ">= 0.10" } }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", @@ -2922,13 +2992,40 @@ "node": ">=4" } }, - "node_modules/has-symbols": { + "node_modules/has-property-descriptors": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", "dev": true, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-unicode": { @@ -2937,6 +3034,18 @@ "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", "dev": true }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", @@ -4133,10 +4242,13 @@ } }, "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", - "dev": true + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/merge-stream": { "version": "2.0.0", @@ -4824,10 +4936,16 @@ } }, "node_modules/object-inspect": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", - "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==", - "dev": true + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/object-keys": { "version": "1.1.1", @@ -5116,9 +5234,9 @@ } }, "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", + "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==", "dev": true }, "node_modules/picocolors": { @@ -5306,12 +5424,12 @@ } }, "node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", "dev": true, "dependencies": { - "side-channel": "^1.0.4" + "side-channel": "^1.0.6" }, "engines": { "node": ">=0.6" @@ -5901,9 +6019,9 @@ } }, "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", "dev": true, "dependencies": { "debug": "2.6.9", @@ -5933,6 +6051,15 @@ "node": ">= 0.8" } }, + "node_modules/send/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/send/node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -6003,15 +6130,15 @@ "dev": true }, "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", "dev": true, "dependencies": { - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.18.0" + "send": "0.19.0" }, "engines": { "node": ">= 0.8.0" @@ -6023,6 +6150,23 @@ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", "dev": true }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", @@ -6051,14 +6195,18 @@ } }, "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", "dev": true, "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -8650,9 +8798,9 @@ "dev": true }, "body-parser": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", - "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", "dev": true, "requires": { "bytes": "3.1.2", @@ -8663,7 +8811,7 @@ "http-errors": "2.0.0", "iconv-lite": "0.4.24", "on-finished": "2.4.1", - "qs": "6.11.0", + "qs": "6.13.0", "raw-body": "2.5.2", "type-is": "~1.6.18", "unpipe": "1.0.0" @@ -8823,13 +8971,16 @@ } }, "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "dev": true, "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" } }, "camel-case": { @@ -9272,6 +9423,17 @@ "execa": "^5.0.0" } }, + "define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "requires": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + } + }, "define-lazy-prop": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", @@ -9407,9 +9569,9 @@ "dev": true }, "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", "dev": true }, "encoding": { @@ -9511,6 +9673,21 @@ "unbox-primitive": "^1.0.0" } }, + "es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "requires": { + "get-intrinsic": "^1.2.4" + } + }, + "es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true + }, "es-module-lexer": { "version": "1.5.4", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", @@ -9615,37 +9792,37 @@ } }, "express": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", - "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.0.tgz", + "integrity": "sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng==", "dev": true, "requires": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.2", + "body-parser": "1.20.3", "content-disposition": "0.5.4", "content-type": "~1.0.4", "cookie": "0.6.0", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "1.2.0", + "finalhandler": "1.3.1", "fresh": "0.5.2", "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", + "merge-descriptors": "1.0.3", "methods": "~1.1.2", "on-finished": "2.4.1", "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", + "path-to-regexp": "0.1.10", "proxy-addr": "~2.0.7", - "qs": "6.11.0", + "qs": "6.13.0", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", + "send": "0.19.0", + "serve-static": "1.16.2", "setprototypeof": "1.2.0", "statuses": "2.0.1", "type-is": "~1.6.18", @@ -9722,13 +9899,13 @@ } }, "finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", "dev": true, "requires": { "debug": "2.6.9", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "on-finished": "2.4.1", "parseurl": "~1.3.3", @@ -9830,9 +10007,9 @@ "optional": true }, "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "dev": true }, "gauge": { @@ -9884,14 +10061,16 @@ "dev": true }, "get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "dev": true, "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" } }, "get-stdin": { @@ -9946,6 +10125,15 @@ "minimatch": "~3.0.2" } }, + "gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.3" + } + }, "graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", @@ -9985,10 +10173,25 @@ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, - "has-symbols": { + "has-property-descriptors": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "requires": { + "es-define-property": "^1.0.0" + } + }, + "has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "dev": true + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "dev": true }, "has-unicode": { @@ -9997,6 +10200,15 @@ "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", "dev": true }, + "hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "requires": { + "function-bind": "^1.1.2" + } + }, "he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", @@ -10902,9 +11114,9 @@ } }, "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", "dev": true }, "merge-stream": { @@ -11417,9 +11629,9 @@ } }, "object-inspect": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", - "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", "dev": true }, "object-keys": { @@ -11641,9 +11853,9 @@ } }, "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", + "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==", "dev": true }, "picocolors": { @@ -11784,12 +11996,12 @@ "dev": true }, "qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", "dev": true, "requires": { - "side-channel": "^1.0.4" + "side-channel": "^1.0.6" } }, "quick-lru": { @@ -12241,9 +12453,9 @@ "dev": true }, "send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", "dev": true, "requires": { "debug": "2.6.9", @@ -12267,6 +12479,12 @@ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "dev": true }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true + }, "ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -12332,15 +12550,15 @@ } }, "serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", "dev": true, "requires": { - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.18.0" + "send": "0.19.0" } }, "set-blocking": { @@ -12349,6 +12567,20 @@ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", "dev": true }, + "set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "requires": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + } + }, "setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", @@ -12371,14 +12603,15 @@ "dev": true }, "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", "dev": true, "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" } }, "signal-exit": { diff --git a/release_notes.md b/release_notes.md index 7cbdd8b36f..232b1c4b16 100644 --- a/release_notes.md +++ b/release_notes.md @@ -231,7 +231,7 @@ - [#1961](https://github.com/Flank/flank/pull/1961) Add implementation section to architecture doc ([jan-gogo](https://github.com/jan-gogo)) - [#1954](https://github.com/Flank/flank/pull/1954) Add architecture abstraction ([jan-gogo](https://github.com/jan-gogo)) ### CI Changes -- [#1972](https://github.com/Flank/flank/pull/1972) Update cla assitant ([piotradamczyk5](https://github.com/piotradamczyk5)) +- [#1972](https://github.com/Flank/flank/pull/1972) Update cla assistant ([piotradamczyk5](https://github.com/piotradamczyk5)) - [#1949](https://github.com/Flank/flank/pull/1949) Validate Maven version on publish ([piotradamczyk5](https://github.com/piotradamczyk5)) - [#1942](https://github.com/Flank/flank/pull/1942) Ubuntu updates ([Sloox](https://github.com/Sloox)) - [#1934](https://github.com/Flank/flank/pull/1934) Make IT results independent of os versions ([Sloox](https://github.com/Sloox), [pawelpasterz](https://github.com/pawelpasterz)) @@ -240,7 +240,7 @@ ### Refactor - [#1952](https://github.com/Flank/flank/pull/1952) Data scratch ios ([Sloox](https://github.com/Sloox)) - [#1937](https://github.com/Flank/flank/pull/1937) Run doctor command ([pawelpasterz](https://github.com/pawelpasterz), [adamfilipow92](https://github.com/adamfilipow92)) -- [#1948](https://github.com/Flank/flank/pull/1948) Move am instrument commad formatter to dedicated module ([jan-gogo](https://github.com/jan-gogo)) +- [#1948](https://github.com/Flank/flank/pull/1948) Move am instrument command formatter to dedicated module ([jan-gogo](https://github.com/jan-gogo)) - [#1950](https://github.com/Flank/flank/pull/1950) Move apk parsers to dedicated module ([jan-gogo](https://github.com/jan-gogo)) - [#1941](https://github.com/Flank/flank/pull/1941) Refactor data scratch-Android run ([piotradamczyk5](https://github.com/piotradamczyk5)) - [#1931](https://github.com/Flank/flank/pull/1931) Add removing stack traces for simple report ([piotradamczyk5](https://github.com/piotradamczyk5)) @@ -316,7 +316,7 @@ - [#1793](https://github.com/Flank/flank/pull/1793) Added workaround for uppercase project name ([piotradamczyk5](https://github.com/piotradamczyk5)) - [#1784](https://github.com/Flank/flank/pull/1784) Skip Dump shards IT test ([Sloox](https://github.com/Sloox)) - [#1782](https://github.com/Flank/flank/pull/1782) Fix entrypoint file name ([pawelpasterz](https://github.com/pawelpasterz)) -- [#1772](https://github.com/Flank/flank/pull/1772) Fix flank-scripts test failure on MacOS ([adamfilipow92](https://github.com/adamfilipow92), [piotradamczyk5](https://github.com/piotradamczyk5)) +- [#1772](https://github.com/Flank/flank/pull/1772) Fix flank-scripts test failure on macOS ([adamfilipow92](https://github.com/adamfilipow92), [piotradamczyk5](https://github.com/piotradamczyk5)) ### Features - [#1773](https://github.com/Flank/flank/pull/1773) Add printing total run duration ([piotradamczyk5](https://github.com/piotradamczyk5)) - [#1779](https://github.com/Flank/flank/pull/1779) Implement custom sharding -- iOS ([pawelpasterz](https://github.com/pawelpasterz)) @@ -331,14 +331,14 @@ - [#1732](https://github.com/Flank/flank/pull/1732) Follow up refactor fix ([pawelpasterz](https://github.com/pawelpasterz)) - [#1725](https://github.com/Flank/flank/pull/1725) Ix cli class diagram link () - [#1694](https://github.com/Flank/flank/pull/1694) Output path to local results github action ([piotradamczyk5](https://github.com/piotradamczyk5)) -- [#1693](https://github.com/Flank/flank/pull/1693) White space in Github action ([piotradamczyk5](https://github.com/piotradamczyk5)) +- [#1693](https://github.com/Flank/flank/pull/1693) White space in GitHub action ([piotradamczyk5](https://github.com/piotradamczyk5)) ### Documentation - [#1735](https://github.com/Flank/flank/pull/1735) Add base pages for flank layers ([jan-gogo](https://github.com/jan-gogo)) - [#1714](https://github.com/Flank/flank/pull/1714) Flutter support ([jan-gogo](https://github.com/jan-gogo), [adamfilipow92](https://github.com/adamfilipow92)) - [#1733](https://github.com/Flank/flank/pull/1733) Add flank component diagram ([jan-gogo](https://github.com/jan-gogo)) - [#1707](https://github.com/Flank/flank/pull/1707) Add cli class diagram ([jan-gogo](https://github.com/jan-gogo)) - [#1709](https://github.com/Flank/flank/pull/1709) Desktop POC SDD ([piotradamczyk5](https://github.com/piotradamczyk5)) -- [#1701](https://github.com/Flank/flank/pull/1701) Create Github marketplace documentation for Flank action ([piotradamczyk5](https://github.com/piotradamczyk5)) +- [#1701](https://github.com/Flank/flank/pull/1701) Create GitHub marketplace documentation for Flank action ([piotradamczyk5](https://github.com/piotradamczyk5)) ### Refactor - [#1741](https://github.com/Flank/flank/pull/1741) Rename cli package ([piotradamczyk5](https://github.com/piotradamczyk5)) - [#1588](https://github.com/Flank/flank/pull/1588) Investigate and create proposal ([pawelpasterz](https://github.com/pawelpasterz), [jan-gogo](https://github.com/jan-gogo)) @@ -366,9 +366,9 @@ - [#1649](https://github.com/Flank/flank/pull/1649) JUnitReport.xml only contained 50 test results ([dmytrodanylyk](https://github.com/dmytrodanylyk)) - [#1648](https://github.com/Flank/flank/pull/1648) Publishing to GithubPackages ([piotradamczyk5](https://github.com/piotradamczyk5)) ### Features -- [#1675](https://github.com/Flank/flank/pull/1675) Return directories path in Flank Github action ([adamfilipow92](https://github.com/adamfilipow92), [piotradamczyk5](https://github.com/piotradamczyk5)) -- [#1673](https://github.com/Flank/flank/pull/1673) Run Flank Github action with config provided by user ([adamfilipow92](https://github.com/adamfilipow92), [piotradamczyk5](https://github.com/piotradamczyk5)) -- [#1663](https://github.com/Flank/flank/pull/1663) Added reading service account in Github action ([adamfilipow92](https://github.com/adamfilipow92), [piotradamczyk5](https://github.com/piotradamczyk5)) +- [#1675](https://github.com/Flank/flank/pull/1675) Return directories path in Flank GitHub action ([adamfilipow92](https://github.com/adamfilipow92), [piotradamczyk5](https://github.com/piotradamczyk5)) +- [#1673](https://github.com/Flank/flank/pull/1673) Run Flank GitHub action with config provided by user ([adamfilipow92](https://github.com/adamfilipow92), [piotradamczyk5](https://github.com/piotradamczyk5)) +- [#1663](https://github.com/Flank/flank/pull/1663) Added reading service account in GitHub action ([adamfilipow92](https://github.com/adamfilipow92), [piotradamczyk5](https://github.com/piotradamczyk5)) - [#1660](https://github.com/Flank/flank/pull/1660) Add Flank GitHub action ([adamfilipow92](https://github.com/adamfilipow92), [piotradamczyk5](https://github.com/piotradamczyk5)) - [#1659](https://github.com/Flank/flank/pull/1659) Remove flank-actions ([Sloox](https://github.com/Sloox)) - [#1655](https://github.com/Flank/flank/pull/1655) Update Flank Slack release notifier ([Sloox](https://github.com/Sloox)) @@ -391,12 +391,12 @@ - [#1641](https://github.com/Flank/flank/pull/1641) Add missing subcommands ([pawelpasterz](https://github.com/pawelpasterz)) - [#1642](https://github.com/Flank/flank/pull/1642) Fix release workflow ([pawelpasterz](https://github.com/pawelpasterz)) - [#1640](https://github.com/Flank/flank/pull/1640) Fix gradle command ([pawelpasterz](https://github.com/pawelpasterz)) -- [#1618](https://github.com/Flank/flank/pull/1618) Publish Flank-scripts to Github ([piotradamczyk5](https://github.com/piotradamczyk5)) +- [#1618](https://github.com/Flank/flank/pull/1618) Publish Flank-scripts to GitHub ([piotradamczyk5](https://github.com/piotradamczyk5)) - [#1614](https://github.com/Flank/flank/pull/1614) Publish flank to maven central ([adamfilipow92](https://github.com/adamfilipow92), [piotradamczyk5](https://github.com/piotradamczyk5)) ### Documentation - [#1627](https://github.com/Flank/flank/pull/1627) Explore test-targets-for-shards SDD ([Sloox](https://github.com/Sloox), [piotradamczyk5](https://github.com/piotradamczyk5)) -- [#1592](https://github.com/Flank/flank/pull/1592) Fix SDD for Github action ([piotradamczyk5](https://github.com/piotradamczyk5)) -- [#1590](https://github.com/Flank/flank/pull/1590) Github action SDD proposal ([piotradamczyk5](https://github.com/piotradamczyk5)) +- [#1592](https://github.com/Flank/flank/pull/1592) Fix SDD for GitHub action ([piotradamczyk5](https://github.com/piotradamczyk5)) +- [#1590](https://github.com/Flank/flank/pull/1590) GitHub action SDD proposal ([piotradamczyk5](https://github.com/piotradamczyk5)) - [#1583](https://github.com/Flank/flank/pull/1583) Flank-scripts ops package organization ([piotradamczyk5](https://github.com/piotradamczyk5)) - [#1566](https://github.com/Flank/flank/pull/1566) Flank-scripts command overview ([piotradamczyk5](https://github.com/piotradamczyk5)) ### Features @@ -407,7 +407,7 @@ - [#1631](https://github.com/Flank/flank/pull/1631) Update compare files in IT ([Sloox](https://github.com/Sloox), [pawelpasterz](https://github.com/pawelpasterz)) - [#1628](https://github.com/Flank/flank/pull/1628) Remove analytics from integration tests ([Sloox](https://github.com/Sloox)) - [#1626](https://github.com/Flank/flank/pull/1626) Spacing fix for yml file ([Sloox](https://github.com/Sloox)) -- [#1620](https://github.com/Flank/flank/pull/1620) Authenticate in Github CLI before release Flank-Scripts ([piotradamczyk5](https://github.com/piotradamczyk5)) +- [#1620](https://github.com/Flank/flank/pull/1620) Authenticate in GitHub CLI before release Flank-Scripts ([piotradamczyk5](https://github.com/piotradamczyk5)) - [#1619](https://github.com/Flank/flank/pull/1619) Releasing flank-scripts ([piotradamczyk5](https://github.com/piotradamczyk5)) - [#1617](https://github.com/Flank/flank/pull/1617) Release job ([piotradamczyk5](https://github.com/piotradamczyk5)) - [#1612](https://github.com/Flank/flank/pull/1612) NPE on dumpShards ([adamfilipow92](https://github.com/adamfilipow92)) @@ -540,7 +540,7 @@ - [#1164](https://github.com/Flank/flank/pull/1164) Dependabot security issues ([Sloox](https://github.com/Sloox)) ### Refactor - [#1350](https://github.com/Flank/flank/pull/1350) Ios test artifacts cleanup #1345 ([axelzuziak-gogo](https://github.com/axelzuziak-gogo), [jan-gogo](https://github.com/jan-gogo)) -- [#1339](https://github.com/Flank/flank/pull/1339) Simplify beforeRunTests return singature ([jan-gogo](https://github.com/jan-gogo)) +- [#1339](https://github.com/Flank/flank/pull/1339) Simplify beforeRunTests return signature ([jan-gogo](https://github.com/jan-gogo)) - [#1281](https://github.com/Flank/flank/pull/1281) Prepare flank codebase for supporting iOS testplans ([axelzuziak-gogo](https://github.com/axelzuziak-gogo), [jan-gogo](https://github.com/jan-gogo)) - [#1246](https://github.com/Flank/flank/pull/1246) Rewrite scripts to Kotlin ([adamfilipow92](https://github.com/adamfilipow92), [piotradamczyk5](https://github.com/piotradamczyk5)) ### CI Changes @@ -552,11 +552,11 @@ - [#1286](https://github.com/Flank/flank/pull/1286) Update existing bot comment ([pawelpasterz](https://github.com/pawelpasterz)) - [#1269](https://github.com/Flank/flank/pull/1269) Add build scan for ubuntu workflow ([pawelpasterz](https://github.com/pawelpasterz)) - [#1265](https://github.com/Flank/flank/pull/1265) Refresh integration tests ([piotradamczyk5](https://github.com/piotradamczyk5)) -- [#1263](https://github.com/Flank/flank/pull/1263) Github Action optimizations ([piotradamczyk5](https://github.com/piotradamczyk5)) -- [#1253](https://github.com/Flank/flank/pull/1253) Use Github app token for creating release notes ([piotradamczyk5](https://github.com/piotradamczyk5)) +- [#1263](https://github.com/Flank/flank/pull/1263) GitHub Action optimizations ([piotradamczyk5](https://github.com/piotradamczyk5)) +- [#1253](https://github.com/Flank/flank/pull/1253) Use GitHub app token for creating release notes ([piotradamczyk5](https://github.com/piotradamczyk5)) - [#1248](https://github.com/Flank/flank/pull/1248) Update deprecated options ::set-env and ::add-path ([piotradamczyk5](https://github.com/piotradamczyk5)) -- [#1240](https://github.com/Flank/flank/pull/1240) Add current date to dependecy PR ([pawelpasterz](https://github.com/pawelpasterz)) -- [#1148](https://github.com/Flank/flank/pull/1148) Add scripts for test artifacts managment ([jan-gogo](https://github.com/jan-gogo), [piotradamczyk5](https://github.com/piotradamczyk5)) +- [#1240](https://github.com/Flank/flank/pull/1240) Add current date to dependency PR ([pawelpasterz](https://github.com/pawelpasterz)) +- [#1148](https://github.com/Flank/flank/pull/1148) Add scripts for test artifacts management ([jan-gogo](https://github.com/jan-gogo), [piotradamczyk5](https://github.com/piotradamczyk5)) - [#1210](https://github.com/Flank/flank/pull/1210) Enable RC versions for gradle (dependency update task) ([pawelpasterz](https://github.com/pawelpasterz)) - [#1158](https://github.com/Flank/flank/pull/1158) Fix test artifacts url ([jan-gogo](https://github.com/jan-gogo)) - [#1152](https://github.com/Flank/flank/pull/1152) Added WSL workflow ([Sloox](https://github.com/Sloox), [piotradamczyk5](https://github.com/piotradamczyk5)) @@ -628,7 +628,7 @@ ## v20.09.2 ### Features - [#1111](https://github.com/Flank/flank/pull/1111) Check if gcs path exist before run ([piotradamczyk5](https://github.com/piotradamczyk5)) -- [#1110](https://github.com/Flank/flank/pull/1110) Finialize the slack sending integration with actions ([Sloox](https://github.com/Sloox)) +- [#1110](https://github.com/Flank/flank/pull/1110) Finalize the slack sending integration with actions ([Sloox](https://github.com/Sloox)) - [#1108](https://github.com/Flank/flank/pull/1108) Support for robo tests without robo script ([pawelpasterz](https://github.com/pawelpasterz)) - [#1104](https://github.com/Flank/flank/pull/1104) Send slack message for releases ([Sloox](https://github.com/Sloox)) - [#1097](https://github.com/Flank/flank/pull/1097) Print the matrices web link at the end of a run ([adamfilipow92](https://github.com/adamfilipow92)) @@ -677,7 +677,7 @@ ## v20.08.3 ### CI Changes -- [#1031](https://github.com/Flank/flank/pull/1031) Disable publishing snapshot to Github Packages ([piotradamczyk5](https://github.com/piotradamczyk5)) +- [#1031](https://github.com/Flank/flank/pull/1031) Disable publishing snapshot to GitHub Packages ([piotradamczyk5](https://github.com/piotradamczyk5)) - [#1022](https://github.com/Flank/flank/pull/1022) Publish to GitHub packages ([piotradamczyk5](https://github.com/piotradamczyk5)) ### Bug Fixes - [#1027](https://github.com/Flank/flank/pull/1027) OtherNativeCrash NPE ([jan-gogo](https://github.com/jan-gogo)) @@ -706,7 +706,7 @@ - [#990](https://github.com/Flank/flank/pull/990) Exclusion of @Suppress test ([piotradamczyk5](https://github.com/piotradamczyk5)) ### CI Changes - [#1015](https://github.com/Flank/flank/pull/1015) Update mergify configuration ([piotradamczyk5](https://github.com/piotradamczyk5)) -- [#1011](https://github.com/Flank/flank/pull/1011) Generate release notes for Github release description ([piotradamczyk5](https://github.com/piotradamczyk5)) +- [#1011](https://github.com/Flank/flank/pull/1011) Generate release notes for GitHub release description ([piotradamczyk5](https://github.com/piotradamczyk5)) - [#989](https://github.com/Flank/flank/pull/989) Check if valid title is used in PR ([piotradamczyk5](https://github.com/piotradamczyk5)) ### Documentation - [#987](https://github.com/Flank/flank/pull/987) Analytics addition to readme ([Sloox](https://github.com/Sloox)) diff --git a/test_projects/android/apks/parametrized-app-debug-androidTest.apk b/test_projects/android/apks/parametrized-app-debug-androidTest.apk new file mode 100644 index 0000000000..5172a70c12 Binary files /dev/null and b/test_projects/android/apks/parametrized-app-debug-androidTest.apk differ diff --git a/test_projects/android/apks/parametrized-app-debug.apk b/test_projects/android/apks/parametrized-app-debug.apk new file mode 100644 index 0000000000..67cd1b7440 Binary files /dev/null and b/test_projects/android/apks/parametrized-app-debug.apk differ diff --git a/test_projects/android/app/src/androidTest/java/com/example/test_app/screenshot/ScreenshotTestRule.kt b/test_projects/android/app/src/androidTest/java/com/example/test_app/screenshot/ScreenshotTestRule.kt index 92187d1cd9..986776975a 100644 --- a/test_projects/android/app/src/androidTest/java/com/example/test_app/screenshot/ScreenshotTestRule.kt +++ b/test_projects/android/app/src/androidTest/java/com/example/test_app/screenshot/ScreenshotTestRule.kt @@ -26,7 +26,7 @@ import org.junit.runners.model.Statement class ScreenshotTestRule : TestRule { // Note: Data seeding must happen before we run a test. As a result, retrying failed tests - // at the JUnit level doesn"t make sense because we can"t run data seeeding. + // at the JUnit level doesn't make sense because we can't run data seeding. // // Run all test methods tryCount times. Take screenshots on failure. // A method rule would allow targeting specific (method.getAnnotation(Retry.class)) diff --git a/test_projects/android/cucumber_sample_app/cucumber-android/src/test/java/io/cucumber/junit/ArgumentsTest.java b/test_projects/android/cucumber_sample_app/cucumber-android/src/test/java/io/cucumber/junit/ArgumentsTest.java index 2e1c74b9b7..6ffde14b11 100644 --- a/test_projects/android/cucumber_sample_app/cucumber-android/src/test/java/io/cucumber/junit/ArgumentsTest.java +++ b/test_projects/android/cucumber_sample_app/cucumber-android/src/test/java/io/cucumber/junit/ArgumentsTest.java @@ -406,7 +406,7 @@ public void isDebugEnabled_returns_false_when_bundle_contains_no_value() { @Test public void coverageDataFilePath_returns_value_when_bundle_contains_value() { // given - final String fileName = "some_custome_file.name"; + final String fileName = "some_custom_file.name"; final Bundle bundle = spy(new Bundle()); bundle.putString(Arguments.KEY.COVERAGE_DATA_FILE_PATH, fileName); diff --git a/test_projects/android/parameterizedAnnotatedTests/.gitignore b/test_projects/android/parameterizedAnnotatedTests/.gitignore new file mode 100644 index 0000000000..42afabfd2a --- /dev/null +++ b/test_projects/android/parameterizedAnnotatedTests/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/test_projects/android/parameterizedAnnotatedTests/build.gradle.kts b/test_projects/android/parameterizedAnnotatedTests/build.gradle.kts new file mode 100644 index 0000000000..0b905dd1dd --- /dev/null +++ b/test_projects/android/parameterizedAnnotatedTests/build.gradle.kts @@ -0,0 +1,46 @@ +plugins { + id("com.android.application") + id("org.jetbrains.kotlin.android") +} + +android { + namespace = "flank.shard.annotationbug" + compileSdk = 34 + + defaultConfig { + applicationId = "flank.shard.annotationbug" + minSdk = 24 + targetSdk = 34 + versionCode = 1 + versionName = "1.0" + + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + } + + buildTypes { + release { + isMinifyEnabled = false + proguardFiles( + getDefaultProguardFile("proguard-android-optimize.txt"), + "proguard-rules.pro" + ) + } + } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + kotlinOptions { + jvmTarget = "1.8" + } +} + +dependencies { + + implementation("androidx.core:core-ktx:1.12.0") + implementation("androidx.appcompat:appcompat:1.6.1") + implementation("com.google.android.material:material:1.11.0") + testImplementation("junit:junit:4.13.2") + androidTestImplementation("androidx.test.ext:junit:1.1.5") + androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1") +} \ No newline at end of file diff --git a/test_projects/android/parameterizedAnnotatedTests/proguard-rules.pro b/test_projects/android/parameterizedAnnotatedTests/proguard-rules.pro new file mode 100644 index 0000000000..481bb43481 --- /dev/null +++ b/test_projects/android/parameterizedAnnotatedTests/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/test_projects/android/parameterizedAnnotatedTests/src/androidTest/java/flank/shard/annotationbug/Annotation.kt b/test_projects/android/parameterizedAnnotatedTests/src/androidTest/java/flank/shard/annotationbug/Annotation.kt new file mode 100644 index 0000000000..c71c7a2814 --- /dev/null +++ b/test_projects/android/parameterizedAnnotatedTests/src/androidTest/java/flank/shard/annotationbug/Annotation.kt @@ -0,0 +1,12 @@ +package flank.shard.annotationbug + +@Target( + AnnotationTarget.ANNOTATION_CLASS, + AnnotationTarget.FUNCTION, + AnnotationTarget.PROPERTY_GETTER, + AnnotationTarget.PROPERTY_SETTER +) +@Retention( + AnnotationRetention.RUNTIME +) +annotation class Annotation diff --git a/test_projects/android/parameterizedAnnotatedTests/src/androidTest/java/flank/shard/annotationbug/FooAnnotatedParameterizedTest.kt b/test_projects/android/parameterizedAnnotatedTests/src/androidTest/java/flank/shard/annotationbug/FooAnnotatedParameterizedTest.kt new file mode 100644 index 0000000000..1d1aca8752 --- /dev/null +++ b/test_projects/android/parameterizedAnnotatedTests/src/androidTest/java/flank/shard/annotationbug/FooAnnotatedParameterizedTest.kt @@ -0,0 +1,18 @@ +package flank.shard.annotationbug + +import androidx.test.platform.app.InstrumentationRegistry +import org.junit.Assert +import org.junit.Test +import org.junit.runner.RunWith +import org.junit.runners.Parameterized + +@RunWith(Parameterized::class) +class FooAnnotatedParameterizedTest { + @Test + @FooAnnotation + fun useAppContext() { + // Context of the app under test. + val appContext = InstrumentationRegistry.getInstrumentation().targetContext + Assert.assertEquals("flank.shard.annotationbug", appContext.packageName) + } +} \ No newline at end of file diff --git a/test_projects/android/parameterizedAnnotatedTests/src/androidTest/java/flank/shard/annotationbug/FooAnnotation.kt b/test_projects/android/parameterizedAnnotatedTests/src/androidTest/java/flank/shard/annotationbug/FooAnnotation.kt new file mode 100644 index 0000000000..43ccf0cdc4 --- /dev/null +++ b/test_projects/android/parameterizedAnnotatedTests/src/androidTest/java/flank/shard/annotationbug/FooAnnotation.kt @@ -0,0 +1,13 @@ +package flank.shard.annotationbug + +@Target( + AnnotationTarget.ANNOTATION_CLASS, + AnnotationTarget.FUNCTION, + AnnotationTarget.PROPERTY_GETTER, + AnnotationTarget.PROPERTY_SETTER +) +@Retention( + AnnotationRetention.RUNTIME +) + +annotation class FooAnnotation() diff --git a/test_projects/android/parameterizedAnnotatedTests/src/androidTest/java/flank/shard/annotationbug/InstrumentedAnnotatedTest.kt b/test_projects/android/parameterizedAnnotatedTests/src/androidTest/java/flank/shard/annotationbug/InstrumentedAnnotatedTest.kt new file mode 100644 index 0000000000..f5becc19e1 --- /dev/null +++ b/test_projects/android/parameterizedAnnotatedTests/src/androidTest/java/flank/shard/annotationbug/InstrumentedAnnotatedTest.kt @@ -0,0 +1,25 @@ +package flank.shard.annotationbug + +import androidx.test.platform.app.InstrumentationRegistry +import androidx.test.ext.junit.runners.AndroidJUnit4 + +import org.junit.Test +import org.junit.runner.RunWith + +import org.junit.Assert.* + +/** + * Instrumented test, which will execute on an Android device. + * + * See [testing documentation](http://d.android.com/tools/testing). + */ +@RunWith(AndroidJUnit4::class) +class InstrumentedAnnotatedTest { + @Test + @Annotation + fun useAppContext() { + // Context of the app under test. + val appContext = InstrumentationRegistry.getInstrumentation().targetContext + assertEquals("flank.shard.annotationbug", appContext.packageName) + } +} \ No newline at end of file diff --git a/test_projects/android/parameterizedAnnotatedTests/src/androidTest/java/flank/shard/annotationbug/InstrumentedTest.kt b/test_projects/android/parameterizedAnnotatedTests/src/androidTest/java/flank/shard/annotationbug/InstrumentedTest.kt new file mode 100644 index 0000000000..e4c8486abb --- /dev/null +++ b/test_projects/android/parameterizedAnnotatedTests/src/androidTest/java/flank/shard/annotationbug/InstrumentedTest.kt @@ -0,0 +1,24 @@ +package flank.shard.annotationbug + +import androidx.test.platform.app.InstrumentationRegistry +import androidx.test.ext.junit.runners.AndroidJUnit4 + +import org.junit.Test +import org.junit.runner.RunWith + +import org.junit.Assert.* + +/** + * Instrumented test, which will execute on an Android device. + * + * See [testing documentation](http://d.android.com/tools/testing). + */ +@RunWith(AndroidJUnit4::class) +class InstrumentedTest { + @Test + fun useAppContext() { + // Context of the app under test. + val appContext = InstrumentationRegistry.getInstrumentation().targetContext + assertEquals("flank.shard.annotationbug", appContext.packageName) + } +} \ No newline at end of file diff --git a/test_projects/android/parameterizedAnnotatedTests/src/androidTest/java/flank/shard/annotationbug/ParameterizedAnnotatedTest.kt b/test_projects/android/parameterizedAnnotatedTests/src/androidTest/java/flank/shard/annotationbug/ParameterizedAnnotatedTest.kt new file mode 100644 index 0000000000..3a696b261d --- /dev/null +++ b/test_projects/android/parameterizedAnnotatedTests/src/androidTest/java/flank/shard/annotationbug/ParameterizedAnnotatedTest.kt @@ -0,0 +1,25 @@ +package flank.shard.annotationbug + +import androidx.test.platform.app.InstrumentationRegistry + +import org.junit.Test +import org.junit.runner.RunWith + +import org.junit.Assert.* +import org.junit.runners.Parameterized + +/** + * Instrumented test, which will execute on an Android device. + * + * See [testing documentation](http://d.android.com/tools/testing). + */ +@RunWith(Parameterized::class) +class ParameterizedAnnotatedTest { + @Test + @Annotation + fun useAppContext() { + // Context of the app under test. + val appContext = InstrumentationRegistry.getInstrumentation().targetContext + assertEquals("flank.shard.annotationbug", appContext.packageName) + } +} \ No newline at end of file diff --git a/test_projects/android/parameterizedAnnotatedTests/src/androidTest/java/flank/shard/annotationbug/ParameterizedTest.kt b/test_projects/android/parameterizedAnnotatedTests/src/androidTest/java/flank/shard/annotationbug/ParameterizedTest.kt new file mode 100644 index 0000000000..dee5b7a70b --- /dev/null +++ b/test_projects/android/parameterizedAnnotatedTests/src/androidTest/java/flank/shard/annotationbug/ParameterizedTest.kt @@ -0,0 +1,24 @@ +package flank.shard.annotationbug + +import androidx.test.platform.app.InstrumentationRegistry + +import org.junit.Test +import org.junit.runner.RunWith + +import org.junit.Assert.* +import org.junit.runners.Parameterized + +/** + * Instrumented test, which will execute on an Android device. + * + * See [testing documentation](http://d.android.com/tools/testing). + */ +@RunWith(Parameterized::class) +class ParameterizedTest { + @Test + fun useAppContext() { + // Context of the app under test. + val appContext = InstrumentationRegistry.getInstrumentation().targetContext + assertEquals("flank.shard.annotationbug", appContext.packageName) + } +} \ No newline at end of file diff --git a/test_projects/android/parameterizedAnnotatedTests/src/main/AndroidManifest.xml b/test_projects/android/parameterizedAnnotatedTests/src/main/AndroidManifest.xml new file mode 100644 index 0000000000..77149b3a09 --- /dev/null +++ b/test_projects/android/parameterizedAnnotatedTests/src/main/AndroidManifest.xml @@ -0,0 +1,16 @@ + + + + + + \ No newline at end of file diff --git a/test_projects/android/parameterizedAnnotatedTests/src/main/res/drawable/ic_launcher_background.xml b/test_projects/android/parameterizedAnnotatedTests/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 0000000000..07d5da9cbf --- /dev/null +++ b/test_projects/android/parameterizedAnnotatedTests/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test_projects/android/parameterizedAnnotatedTests/src/main/res/drawable/ic_launcher_foreground.xml b/test_projects/android/parameterizedAnnotatedTests/src/main/res/drawable/ic_launcher_foreground.xml new file mode 100644 index 0000000000..2b068d1146 --- /dev/null +++ b/test_projects/android/parameterizedAnnotatedTests/src/main/res/drawable/ic_launcher_foreground.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/test_projects/android/parameterizedAnnotatedTests/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/test_projects/android/parameterizedAnnotatedTests/src/main/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 0000000000..6f3b755bf5 --- /dev/null +++ b/test_projects/android/parameterizedAnnotatedTests/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/test_projects/android/parameterizedAnnotatedTests/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/test_projects/android/parameterizedAnnotatedTests/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 0000000000..6f3b755bf5 --- /dev/null +++ b/test_projects/android/parameterizedAnnotatedTests/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/test_projects/android/parameterizedAnnotatedTests/src/main/res/mipmap-hdpi/ic_launcher.webp b/test_projects/android/parameterizedAnnotatedTests/src/main/res/mipmap-hdpi/ic_launcher.webp new file mode 100644 index 0000000000..c209e78ecd Binary files /dev/null and b/test_projects/android/parameterizedAnnotatedTests/src/main/res/mipmap-hdpi/ic_launcher.webp differ diff --git a/test_projects/android/parameterizedAnnotatedTests/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/test_projects/android/parameterizedAnnotatedTests/src/main/res/mipmap-hdpi/ic_launcher_round.webp new file mode 100644 index 0000000000..b2dfe3d1ba Binary files /dev/null and b/test_projects/android/parameterizedAnnotatedTests/src/main/res/mipmap-hdpi/ic_launcher_round.webp differ diff --git a/test_projects/android/parameterizedAnnotatedTests/src/main/res/mipmap-mdpi/ic_launcher.webp b/test_projects/android/parameterizedAnnotatedTests/src/main/res/mipmap-mdpi/ic_launcher.webp new file mode 100644 index 0000000000..4f0f1d64e5 Binary files /dev/null and b/test_projects/android/parameterizedAnnotatedTests/src/main/res/mipmap-mdpi/ic_launcher.webp differ diff --git a/test_projects/android/parameterizedAnnotatedTests/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/test_projects/android/parameterizedAnnotatedTests/src/main/res/mipmap-mdpi/ic_launcher_round.webp new file mode 100644 index 0000000000..62b611da08 Binary files /dev/null and b/test_projects/android/parameterizedAnnotatedTests/src/main/res/mipmap-mdpi/ic_launcher_round.webp differ diff --git a/test_projects/android/parameterizedAnnotatedTests/src/main/res/mipmap-xhdpi/ic_launcher.webp b/test_projects/android/parameterizedAnnotatedTests/src/main/res/mipmap-xhdpi/ic_launcher.webp new file mode 100644 index 0000000000..948a3070fe Binary files /dev/null and b/test_projects/android/parameterizedAnnotatedTests/src/main/res/mipmap-xhdpi/ic_launcher.webp differ diff --git a/test_projects/android/parameterizedAnnotatedTests/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/test_projects/android/parameterizedAnnotatedTests/src/main/res/mipmap-xhdpi/ic_launcher_round.webp new file mode 100644 index 0000000000..1b9a6956b3 Binary files /dev/null and b/test_projects/android/parameterizedAnnotatedTests/src/main/res/mipmap-xhdpi/ic_launcher_round.webp differ diff --git a/test_projects/android/parameterizedAnnotatedTests/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/test_projects/android/parameterizedAnnotatedTests/src/main/res/mipmap-xxhdpi/ic_launcher.webp new file mode 100644 index 0000000000..28d4b77f9f Binary files /dev/null and b/test_projects/android/parameterizedAnnotatedTests/src/main/res/mipmap-xxhdpi/ic_launcher.webp differ diff --git a/test_projects/android/parameterizedAnnotatedTests/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/test_projects/android/parameterizedAnnotatedTests/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp new file mode 100644 index 0000000000..9287f50836 Binary files /dev/null and b/test_projects/android/parameterizedAnnotatedTests/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp differ diff --git a/test_projects/android/parameterizedAnnotatedTests/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/test_projects/android/parameterizedAnnotatedTests/src/main/res/mipmap-xxxhdpi/ic_launcher.webp new file mode 100644 index 0000000000..aa7d6427e6 Binary files /dev/null and b/test_projects/android/parameterizedAnnotatedTests/src/main/res/mipmap-xxxhdpi/ic_launcher.webp differ diff --git a/test_projects/android/parameterizedAnnotatedTests/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/test_projects/android/parameterizedAnnotatedTests/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp new file mode 100644 index 0000000000..9126ae37cb Binary files /dev/null and b/test_projects/android/parameterizedAnnotatedTests/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp differ diff --git a/test_projects/android/parameterizedAnnotatedTests/src/main/res/values-night/themes.xml b/test_projects/android/parameterizedAnnotatedTests/src/main/res/values-night/themes.xml new file mode 100644 index 0000000000..50b07d0023 --- /dev/null +++ b/test_projects/android/parameterizedAnnotatedTests/src/main/res/values-night/themes.xml @@ -0,0 +1,16 @@ + + + + \ No newline at end of file diff --git a/test_projects/android/parameterizedAnnotatedTests/src/main/res/values/colors.xml b/test_projects/android/parameterizedAnnotatedTests/src/main/res/values/colors.xml new file mode 100644 index 0000000000..f8c6127d32 --- /dev/null +++ b/test_projects/android/parameterizedAnnotatedTests/src/main/res/values/colors.xml @@ -0,0 +1,10 @@ + + + #FFBB86FC + #FF6200EE + #FF3700B3 + #FF03DAC5 + #FF018786 + #FF000000 + #FFFFFFFF + \ No newline at end of file diff --git a/test_projects/android/parameterizedAnnotatedTests/src/main/res/values/strings.xml b/test_projects/android/parameterizedAnnotatedTests/src/main/res/values/strings.xml new file mode 100644 index 0000000000..24da7c3fcb --- /dev/null +++ b/test_projects/android/parameterizedAnnotatedTests/src/main/res/values/strings.xml @@ -0,0 +1,3 @@ + + flankshardannotationbug + \ No newline at end of file diff --git a/test_projects/android/parameterizedAnnotatedTests/src/main/res/values/themes.xml b/test_projects/android/parameterizedAnnotatedTests/src/main/res/values/themes.xml new file mode 100644 index 0000000000..4179404846 --- /dev/null +++ b/test_projects/android/parameterizedAnnotatedTests/src/main/res/values/themes.xml @@ -0,0 +1,16 @@ + + + + \ No newline at end of file diff --git a/test_projects/android/parameterizedAnnotatedTests/src/main/res/xml/backup_rules.xml b/test_projects/android/parameterizedAnnotatedTests/src/main/res/xml/backup_rules.xml new file mode 100644 index 0000000000..fa0f996d2c --- /dev/null +++ b/test_projects/android/parameterizedAnnotatedTests/src/main/res/xml/backup_rules.xml @@ -0,0 +1,13 @@ + + + + \ No newline at end of file diff --git a/test_projects/android/parameterizedAnnotatedTests/src/main/res/xml/data_extraction_rules.xml b/test_projects/android/parameterizedAnnotatedTests/src/main/res/xml/data_extraction_rules.xml new file mode 100644 index 0000000000..9ee9997b0b --- /dev/null +++ b/test_projects/android/parameterizedAnnotatedTests/src/main/res/xml/data_extraction_rules.xml @@ -0,0 +1,19 @@ + + + + + + + \ No newline at end of file diff --git a/test_projects/android/parameterizedAnnotatedTests/src/test/java/flank/shard/annotationbug/ExampleUnitTest.kt b/test_projects/android/parameterizedAnnotatedTests/src/test/java/flank/shard/annotationbug/ExampleUnitTest.kt new file mode 100644 index 0000000000..fe8fa9450a --- /dev/null +++ b/test_projects/android/parameterizedAnnotatedTests/src/test/java/flank/shard/annotationbug/ExampleUnitTest.kt @@ -0,0 +1,17 @@ +package flank.shard.annotationbug + +import org.junit.Test + +import org.junit.Assert.* + +/** + * Example local unit test, which will execute on the development machine (host). + * + * See [testing documentation](http://d.android.com/tools/testing). + */ +class ExampleUnitTest { + @Test + fun addition_isCorrect() { + assertEquals(4, 2 + 2) + } +} \ No newline at end of file diff --git a/test_projects/ios/FlankExample/FlankExample/SceneDelegate.swift b/test_projects/ios/FlankExample/FlankExample/SceneDelegate.swift index 775305a276..5f906f2099 100644 --- a/test_projects/ios/FlankExample/FlankExample/SceneDelegate.swift +++ b/test_projects/ios/FlankExample/FlankExample/SceneDelegate.swift @@ -24,7 +24,7 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate { // Called as the scene is being released by the system. // This occurs shortly after the scene enters the background, or when its session is discarded. // Release any resources associated with this scene that can be re-created the next time the scene connects. - // The scene may re-connect later, as its session was not neccessarily discarded (see `application:didDiscardSceneSessions` instead). + // The scene may re-connect later, as its session was not necessarily discarded (see `application:didDiscardSceneSessions` instead). } func sceneDidBecomeActive(_ scene: UIScene) { diff --git a/test_runner/build.gradle.kts b/test_runner/build.gradle.kts index cb28c1ad49..fe43a4243b 100644 --- a/test_runner/build.gradle.kts +++ b/test_runner/build.gradle.kts @@ -347,7 +347,7 @@ tasks.test { minHeapSize = "512m" dependsOn(":resolveArtifacts") - // deletes 'results' directory which contains remainings from unit tests + // deletes 'results' directory which contains remains from unit tests // think about better solution doLast { project.delete("results") diff --git a/test_runner/src/main/kotlin/ftl/args/ValidateCommonArgs.kt b/test_runner/src/main/kotlin/ftl/args/ValidateCommonArgs.kt index afa116fea5..6b1d9b3e0d 100644 --- a/test_runner/src/main/kotlin/ftl/args/ValidateCommonArgs.kt +++ b/test_runner/src/main/kotlin/ftl/args/ValidateCommonArgs.kt @@ -22,11 +22,11 @@ fun CommonArgs.validate() { } } -private fun List.devicesWithMispeltOrientations(availableOrientations: List) = +private fun List.devicesWithMisspeltOrientations(availableOrientations: List) = filter { it.orientation !in availableOrientations } private fun CommonArgs.assertOrientationCorrectness() = - devices.devicesWithMispeltOrientations(listOf("portrait", "landscape", "default")).throwIfAnyMisspelt() + devices.devicesWithMisspeltOrientations(listOf("portrait", "landscape", "default")).throwIfAnyMisspelt() private fun List.throwIfAnyMisspelt() = if (isNotEmpty()) throw FlankGeneralError("Orientation misspelled or incorrect, found\n${joinToString(separator = "\n")} \nAborting.") diff --git a/test_runner/src/main/kotlin/ftl/args/yml/Type.kt b/test_runner/src/main/kotlin/ftl/args/yml/Type.kt index b72d74f716..6916f9c4c3 100644 --- a/test_runner/src/main/kotlin/ftl/args/yml/Type.kt +++ b/test_runner/src/main/kotlin/ftl/args/yml/Type.kt @@ -9,8 +9,8 @@ enum class Type(val ymlName: String) { GAMELOOP("game-loop"); } -fun String.toType() = Type.values().find { it.ymlName == this } ?: throwUnsuportedType() +fun String.toType() = Type.values().find { it.ymlName == this } ?: throwUnsupportedType() -private fun String.throwUnsuportedType(): Nothing { +private fun String.throwUnsupportedType(): Nothing { throw FlankGeneralError("Unsupported Type given `$this` only [${Type.values().joinToString(",") { it.ymlName }}] supported.") } diff --git a/test_runner/src/main/kotlin/ftl/client/google/run/android/CreateAndroidInstrumentationTest.kt b/test_runner/src/main/kotlin/ftl/client/google/run/android/CreateAndroidInstrumentationTest.kt index 9340780a07..5a8a1678c0 100644 --- a/test_runner/src/main/kotlin/ftl/client/google/run/android/CreateAndroidInstrumentationTest.kt +++ b/test_runner/src/main/kotlin/ftl/client/google/run/android/CreateAndroidInstrumentationTest.kt @@ -44,7 +44,7 @@ internal fun AndroidInstrumentationTest.setupTestTargets( if (numUniformShards != null) { testTargets = testShards.flatten() val safeNumUniformShards = if (testTargets.size > numUniformShards) numUniformShards else { - logLn("WARNING: num-uniform-shards ($numUniformShards) is higher than number of test cases (${testTargets.size}) from ${testApk.gcsPath}") + logLn("WARNING: num-uniform-shards ($numUniformShards) is greater than number of test cases (${testTargets.size}) from ${testApk.gcsPath}") testTargets.size } uniformSharding = UniformSharding().setNumShards(safeNumUniformShards) diff --git a/test_runner/src/main/kotlin/ftl/client/junit/JUnitXml.kt b/test_runner/src/main/kotlin/ftl/client/junit/JUnitXml.kt index bdf39d55e3..ed0e1a7413 100644 --- a/test_runner/src/main/kotlin/ftl/client/junit/JUnitXml.kt +++ b/test_runner/src/main/kotlin/ftl/client/junit/JUnitXml.kt @@ -46,7 +46,7 @@ fun parseAllSuitesXml(path: File): JUnitTest.Result { } private fun parseAllSuitesXml(data: String): JUnitTest.Result = - // This is workaround for flank being unable to parse into JUnitTesResults + // This is workaround for flank being unable to parse into JUnitTestResults // We need to preserve configure(EMPTY_ELEMENT_AS_NULL, true) to skip empty elements // Once better solution is found, this should be fixed if (data.contains("")) diff --git a/test_runner/src/main/kotlin/ftl/domain/junit/JUnitTestMerge.kt b/test_runner/src/main/kotlin/ftl/domain/junit/JUnitTestMerge.kt index 40bd98f321..c2470d5ae1 100644 --- a/test_runner/src/main/kotlin/ftl/domain/junit/JUnitTestMerge.kt +++ b/test_runner/src/main/kotlin/ftl/domain/junit/JUnitTestMerge.kt @@ -47,6 +47,13 @@ fun JUnitTest.Suite.merge(other: JUnitTest.Suite): JUnitTest.Suite { this.errors = mergeInt(this.errors, other.errors) this.skipped = mergeInt(this.skipped, other.skipped) this.time = mergeDouble(this.time, other.time) + if (other.flakes != null) { + this.flakes = mergeInt( + this.flakes?.toString(), + other.flakes?.toString() + ).toInt() + } + if (this.testcases == null) this.testcases = mutableListOf() if (other.testcases?.isNotEmpty() == true) { diff --git a/test_runner/src/main/kotlin/ftl/domain/testmatrix/UpdateTestMatrix.kt b/test_runner/src/main/kotlin/ftl/domain/testmatrix/UpdateTestMatrix.kt index cf147c3637..f701753c1d 100644 --- a/test_runner/src/main/kotlin/ftl/domain/testmatrix/UpdateTestMatrix.kt +++ b/test_runner/src/main/kotlin/ftl/domain/testmatrix/UpdateTestMatrix.kt @@ -45,7 +45,8 @@ private fun TestMatrix.Data.updateProperties(newMatrix: TestMatrix.Data) = copy( testFileName = newMatrix.testFileName, isCompleted = MatrixState.completed(state) && newMatrix.testExecutions.all { MatrixState.completed(it.state) }, - testExecutions = newMatrix.testExecutions + testExecutions = newMatrix.testExecutions, + isRoboTest = newMatrix.isRoboTest, ) private fun TestMatrix.Data.updateBillableMinutes(billableMinutes: TestMatrix.BillableMinutes) = copy( diff --git a/test_runner/src/main/kotlin/ftl/environment/ios/ListIOsSofwareVersions.kt b/test_runner/src/main/kotlin/ftl/environment/ios/ListIOsSoftwareVersions.kt similarity index 100% rename from test_runner/src/main/kotlin/ftl/environment/ios/ListIOsSofwareVersions.kt rename to test_runner/src/main/kotlin/ftl/environment/ios/ListIOsSoftwareVersions.kt diff --git a/test_runner/src/main/kotlin/ftl/presentation/cli/firebase/test/android/models/describe/AndroidModelDescription.kt b/test_runner/src/main/kotlin/ftl/presentation/cli/firebase/test/android/models/describe/AndroidModelDescription.kt index 9d674a0046..de6c78a33d 100644 --- a/test_runner/src/main/kotlin/ftl/presentation/cli/firebase/test/android/models/describe/AndroidModelDescription.kt +++ b/test_runner/src/main/kotlin/ftl/presentation/cli/firebase/test/android/models/describe/AndroidModelDescription.kt @@ -28,10 +28,10 @@ private fun StringBuilder.appendItems(items: List) = apply { } private fun String.appendThumbnail(thumbnailUrl: String?) = - if (!thumbnailUrl.isNullOrBlank()) StringBuilder(this).appendLine("\n$THUBNAIL_URL_HEADER $thumbnailUrl").toString() + if (!thumbnailUrl.isNullOrBlank()) StringBuilder(this).appendLine("\n$THUMBNAIL_URL_HEADER $thumbnailUrl").toString() else this private const val SUPPORTED_ABIS_HEADER = "supportedAbis:" private const val SUPPORTED_VERSIONS_HEADER = "supportedVersionIds:" private const val TAGS_HEADER = "tags:" -private const val THUBNAIL_URL_HEADER = "thumbnailUrl:" +private const val THUMBNAIL_URL_HEADER = "thumbnailUrl:" diff --git a/test_runner/src/main/kotlin/ftl/presentation/cli/firebase/test/android/versions/ListAndroidSofwareVersions.kt b/test_runner/src/main/kotlin/ftl/presentation/cli/firebase/test/android/versions/ListAndroidSoftwareVersions.kt similarity index 100% rename from test_runner/src/main/kotlin/ftl/presentation/cli/firebase/test/android/versions/ListAndroidSofwareVersions.kt rename to test_runner/src/main/kotlin/ftl/presentation/cli/firebase/test/android/versions/ListAndroidSoftwareVersions.kt diff --git a/test_runner/src/main/kotlin/ftl/run/platform/android/CreateAndroidTestContext.kt b/test_runner/src/main/kotlin/ftl/run/platform/android/CreateAndroidTestContext.kt index 2f761815b6..f97ef0fe04 100644 --- a/test_runner/src/main/kotlin/ftl/run/platform/android/CreateAndroidTestContext.kt +++ b/test_runner/src/main/kotlin/ftl/run/platform/android/CreateAndroidTestContext.kt @@ -151,14 +151,28 @@ internal fun InstrumentationTestContext.getFlankTestMethods( parameterizedTests: String = FlankDefaults.DEFAULT_PARAMETERIZED_TESTS ): List = getParametrizedClasses().let { parameterizedClasses: List -> - DexParser.findTestMethods(test.local, customTestAnnotations) + + val testMethods = DexParser.findTestMethods(test.local, customTestAnnotations) + + val mergedParameterizedClasses = parameterizedClasses.map { parameterizedClass -> + testMethods.find { tm -> + tm.testName.contains(parameterizedClass.testName) + }?.let { tm -> + parameterizedClass.copy( + testName = tm.testName, + annotations = (parameterizedClass.annotations + tm.annotations).distinct() + ) + } ?: parameterizedClass + } + + testMethods .asSequence() .distinctBy { it.testName } .filter(testFilter.shouldRun) .filterNot(parameterizedClasses::belong) .map { testMethod -> testMethod.toFlankTestMethod(args.devices) } .toList() - .plus(parameterizedClasses.onlyShouldRun(testFilter, parameterizedTests.shouldIgnore())) + .plus(mergedParameterizedClasses.onlyShouldRun(testFilter, parameterizedTests.shouldIgnore())) } private fun List.belong(method: TestMethod) = any { diff --git a/test_runner/src/main/kotlin/ftl/run/platform/android/SdkSupress.kt b/test_runner/src/main/kotlin/ftl/run/platform/android/SdkSuppress.kt similarity index 100% rename from test_runner/src/main/kotlin/ftl/run/platform/android/SdkSupress.kt rename to test_runner/src/main/kotlin/ftl/run/platform/android/SdkSuppress.kt diff --git a/test_runner/src/test/kotlin/ftl/api/TestMatrixTest.kt b/test_runner/src/test/kotlin/ftl/api/TestMatrixTest.kt index f76f15e139..2278c37773 100644 --- a/test_runner/src/test/kotlin/ftl/api/TestMatrixTest.kt +++ b/test_runner/src/test/kotlin/ftl/api/TestMatrixTest.kt @@ -318,6 +318,30 @@ class TestMatrixTest { val updatedMatrix = testMatrix.updateWithMatrix(ftlTestMatrix.toApiModel()) assertEquals("N/A", updatedMatrix.appFileName) } + + @Test + fun `isRoboTest property should update to true for Robo Test matrices`() { + val testExecutions = listOf( + createStepExecution(1, "shamu"), + createStepExecution(1, "NexusLowRes") + ) + + val matrixId = "123" + val ftlTestMatrix = ftlTestMatrix() + ftlTestMatrix.testMatrixId = matrixId + ftlTestMatrix.state = PENDING + ftlTestMatrix.resultStorage = createResultsStorage() + ftlTestMatrix.testExecutions = testExecutions + + var testMatrix = ftlTestMatrix.toApiModel() + assert(!testMatrix.isRoboTest) + + val newTestMatrix = ftlTestMatrix.toApiModel().copy(isRoboTest = true) + testMatrix = testMatrix.copy(state = FINISHED) + testMatrix = testMatrix.updateWithMatrix(newTestMatrix) + + assert(testMatrix.isRoboTest) { "isRoboTest was not updated" } + } } private inline fun ref(path: () -> String) = FileReference().apply { gcsPath = path() } diff --git a/test_runner/src/test/kotlin/ftl/args/AndroidArgsTest.kt b/test_runner/src/test/kotlin/ftl/args/AndroidArgsTest.kt index 43f7435ef5..31c831bad6 100644 --- a/test_runner/src/test/kotlin/ftl/args/AndroidArgsTest.kt +++ b/test_runner/src/test/kotlin/ftl/args/AndroidArgsTest.kt @@ -1704,7 +1704,7 @@ AndroidArgs @Test fun `should only keep @LargeTest`() { val expectedTests = setOf( - "LargeParameterizedTests", + "LargeParameterizedTests#largeParameterizedTest", "ExampleInstrumentedTest#useAppContextLarge", "LargeTestClass#testLargeClass" ) @@ -2193,7 +2193,7 @@ AndroidArgs - model: blueline version: 28 locale: en - orientation: poortrait + orientation: portrait_ flank: max-test-shards: -1 """.trimIndent() @@ -2828,7 +2828,7 @@ AndroidArgs } @Test - fun `should throw exception if paramterized test is incorrect`() { + fun `should throw exception if parameterized test is incorrect`() { val yaml = """ gcloud: # Android gcloud @@ -2855,7 +2855,7 @@ AndroidArgs } @Test - fun `should throw NOT throw an exception if paramterized test is ignore-all`() { + fun `should throw NOT throw an exception if parameterized test is ignore-all`() { val yaml = """ gcloud: # Android gcloud @@ -2867,7 +2867,7 @@ AndroidArgs } @Test - fun `should throw NOT throw an exception if paramterized test is shard-into-single`() { + fun `should throw NOT throw an exception if parameterized test is shard-into-single`() { val yaml = """ gcloud: # Android gcloud diff --git a/test_runner/src/test/kotlin/ftl/args/FetchProjectIdTest.kt b/test_runner/src/test/kotlin/ftl/args/FetchProjectIdTest.kt index a381bbf4b9..4a365c5c3a 100644 --- a/test_runner/src/test/kotlin/ftl/args/FetchProjectIdTest.kt +++ b/test_runner/src/test/kotlin/ftl/args/FetchProjectIdTest.kt @@ -52,7 +52,7 @@ class FetchProjectIdTest { fun teardown() = unmockkAll() @Test - fun `should fetch project id from GCLOUD_APLICATION_CREDENTIALS`() { + fun `should fetch project id from GCLOUD_APPLICATION_CREDENTIALS`() { mockkStatic("ftl.util.Utils") { every { getGACPathOrEmpty() } returns gac.absolutePath.toString() assertThat(ArgsHelper.getDefaultProjectIdOrNull()).isEqualTo("id_from_gac") diff --git a/test_runner/src/test/kotlin/ftl/args/IosArgsTest.kt b/test_runner/src/test/kotlin/ftl/args/IosArgsTest.kt index fcd8e9bea8..229518a470 100644 --- a/test_runner/src/test/kotlin/ftl/args/IosArgsTest.kt +++ b/test_runner/src/test/kotlin/ftl/args/IosArgsTest.kt @@ -1172,7 +1172,7 @@ IosArgs } @Test - fun `should useAverageTestTimeForNewTests set to false by defaul`() { + fun `should useAverageTestTimeForNewTests set to false by default`() { val yaml = """ gcloud: test: $testPath diff --git a/test_runner/src/test/kotlin/ftl/args/yml/ErrorParserTest.kt b/test_runner/src/test/kotlin/ftl/args/yml/ErrorParserTest.kt index 2d30fe47f1..29e2d8093f 100644 --- a/test_runner/src/test/kotlin/ftl/args/yml/ErrorParserTest.kt +++ b/test_runner/src/test/kotlin/ftl/args/yml/ErrorParserTest.kt @@ -24,7 +24,7 @@ class ErrorParserTest { @Test fun `parse json mapping error`() { - val instantionError = + val instantiationError = "Instantiation of [simple type, class ftl.config.Device] value failed for JSON property version due to missing (therefore NULL) value for creator parameter version which is a non-nullable type\n" + " at [Source: (StringReader); line: 23, column: 3] (through reference chain: ftl.args.yml.AndroidGcloudYml[\"gcloud\"]->ftl.args.yml.AndroidGcloudYmlParams[\"device\"]->java.util.ArrayList[4]->ftl.config.Device[\"version\"])" @@ -34,17 +34,17 @@ Missing element or value for: 'version' At line: 23, column: 3 """.trimIndent() val buildErrorMessage = ConfigurationErrorMessageBuilder - Assert.assertEquals(expected, buildErrorMessage(instantionError)) + Assert.assertEquals(expected, buildErrorMessage(instantiationError)) } @Test fun `return exception with inner message on parse error`() { - val instantionError = + val instantiationError = "Instantiation oflParams[\"device\"]->java.util.A" val expected = "Parse message error: Instantiation oflParams[\"device\"]->java.util.A".trimIndent() val buildErrorMessage = ConfigurationErrorMessageBuilder - Assert.assertEquals(expected, buildErrorMessage(instantionError)) + Assert.assertEquals(expected, buildErrorMessage(instantiationError)) } @Test(expected = FlankConfigurationError::class) diff --git a/test_runner/src/test/kotlin/ftl/args/yml/test_error_yaml_cases/flank-no-device-version.yml b/test_runner/src/test/kotlin/ftl/args/yml/test_error_yaml_cases/flank-no-device-version.yml index 9bf6952f77..a32a9bd4ae 100644 --- a/test_runner/src/test/kotlin/ftl/args/yml/test_error_yaml_cases/flank-no-device-version.yml +++ b/test_runner/src/test/kotlin/ftl/args/yml/test_error_yaml_cases/flank-no-device-version.yml @@ -18,7 +18,7 @@ gcloud: orientation: portrait # Samsung Galaxy S9 SM-G9600 - model: starqltechn - versxion: 28 + version_: 28 locale: en orientation: portrait # LG Nexus 5 diff --git a/test_runner/src/test/kotlin/ftl/client/xml/JUnitXmlTest.kt b/test_runner/src/test/kotlin/ftl/client/xml/JUnitXmlTest.kt index c7ff9495af..a24088eef0 100644 --- a/test_runner/src/test/kotlin/ftl/client/xml/JUnitXmlTest.kt +++ b/test_runner/src/test/kotlin/ftl/client/xml/JUnitXmlTest.kt @@ -30,6 +30,15 @@ class JUnitXmlTest { + + """.trimIndent() + val flakyTestSuiteXml = """ + + + + + + """.trimIndent() } @@ -405,7 +414,7 @@ junit.framework.Assert.fail(Assert.java:50) fun `merge testTimes`() { /** * 1. First run generates local merged JUnit XML - * - Firbase XML downloaded from each shard + * - Firebase XML downloaded from each shard * - Merged XML is saved locally * * 2. Time XML is generated from merged JUnit XML @@ -525,6 +534,32 @@ junit.framework.Assert.fail(Assert.java:50) val oneSuiteXml = parseOneSuiteXml(crashingOneSuiteMessage.writeToTempFile()).toXmlString().trimIndent() Assert.assertEquals("One Suite Messages should be the same!", expectedOneSuiteMessage, oneSuiteXml) } + + @Test + fun `merge flakes`() { + val merged = parseOneSuiteXml(flakyTestSuiteXml.writeToTempFile()) + merged.merge(merged) + val actual = merged.toXmlString().normalizeLineEnding() + + assertThat(actual).isEqualTo( + """ + + + + + + + + + + + + + + + """.trimIndent() + ) + } } private fun String.writeToTempFile(): File = File.createTempFile("temp", "test") diff --git a/test_runner/src/test/kotlin/ftl/fixtures/test_app_cases/flank-parameterized-config.yml b/test_runner/src/test/kotlin/ftl/fixtures/test_app_cases/flank-parameterized-config.yml new file mode 100644 index 0000000000..a084373dd8 --- /dev/null +++ b/test_runner/src/test/kotlin/ftl/fixtures/test_app_cases/flank-parameterized-config.yml @@ -0,0 +1,7 @@ +gcloud: + app: ../test_projects/android/apks/parametrized-app-debug.apk + test: ../test_projects/android/apks/parametrized-app-debug-androidTest.apk + test-targets: + - annotation flank.shard.annotationbug.Annotation +flank: + max-test-shards: 10 \ No newline at end of file diff --git a/test_runner/src/test/kotlin/ftl/reports/outcome/BillableMinutesTest.kt b/test_runner/src/test/kotlin/ftl/reports/outcome/BillableMinutesTest.kt index d073f90118..0ac3b6f3aa 100644 --- a/test_runner/src/test/kotlin/ftl/reports/outcome/BillableMinutesTest.kt +++ b/test_runner/src/test/kotlin/ftl/reports/outcome/BillableMinutesTest.kt @@ -107,7 +107,7 @@ class BillableMinutesTest { } @Test - fun `should return multiple mixed billing - timeouted`() { + fun `should return multiple mixed billing - timed out`() { val timeout = 120L val expectedVirtual = 3L val expectedPhysical = 4L diff --git a/test_runner/src/test/kotlin/ftl/reports/utils/ReportManagerTest.kt b/test_runner/src/test/kotlin/ftl/reports/utils/ReportManagerTest.kt index 87896f8b9d..c88d4fb1d5 100644 --- a/test_runner/src/test/kotlin/ftl/reports/utils/ReportManagerTest.kt +++ b/test_runner/src/test/kotlin/ftl/reports/utils/ReportManagerTest.kt @@ -125,7 +125,7 @@ class ReportManagerTest { val matrix = matrixPathToObj("./src/test/kotlin/ftl/fixtures/success_result", AndroidArgs.default()) val mockArgs = prepareMockAndroidArgs() every { mockArgs.useLegacyJUnitResult } returns false - every { mockArgs.project } returns "projecId" + every { mockArgs.project } returns "projectId" mockkObject(GoogleJUnitTestFetch) mockkStatic("ftl.client.junit.CreateJUnitTestResultKt") @@ -142,7 +142,7 @@ class ReportManagerTest { val mockArgs = prepareMockAndroidArgs() every { mockArgs.useLegacyJUnitResult } returns false every { mockArgs.fullJUnitResult } returns true - every { mockArgs.project } returns "projecId" + every { mockArgs.project } returns "projectId" mockkObject(GoogleJUnitTestFetch) mockkStatic("ftl.client.junit.CreateJUnitTestResultKt") diff --git a/test_runner/src/test/kotlin/ftl/run/DumpShardsKtTest.kt b/test_runner/src/test/kotlin/ftl/run/DumpShardsKtTest.kt index 5f9b107673..f9f42410fd 100644 --- a/test_runner/src/test/kotlin/ftl/run/DumpShardsKtTest.kt +++ b/test_runner/src/test/kotlin/ftl/run/DumpShardsKtTest.kt @@ -69,7 +69,7 @@ class DumpShardsKtTest { } } """.trimIndent() - if (isWindows) return // TODO Windows Linux subsytem does not contain all expected commands + if (isWindows) return // TODO Windows Linux subsystem does not contain all expected commands // when val actual = runBlocking { AndroidArgs.load(mixedConfigYaml).dumpShards(TEST_SHARD_FILE) @@ -138,7 +138,7 @@ class DumpShardsKtTest { @Test fun `dump shards ios`() { - assumeFalse(isWindows) // TODO Windows Linux subsytem does not contain all expected commands + assumeFalse(isWindows) // TODO Windows Linux subsystem does not contain all expected commands // given val expected = """ @@ -173,7 +173,7 @@ class DumpShardsKtTest { @Test fun `dump shards obfuscated ios`() { - assumeFalse(isWindows) // TODO Windows Linux subsytem does not contain all expected commands + assumeFalse(isWindows) // TODO Windows Linux subsystem does not contain all expected commands // given val expected = """ diff --git a/test_runner/src/test/kotlin/ftl/run/platform/android/CreateAndroidTestContextKtTest.kt b/test_runner/src/test/kotlin/ftl/run/platform/android/CreateAndroidTestContextKtTest.kt index abfdbd2427..7b257a70fe 100644 --- a/test_runner/src/test/kotlin/ftl/run/platform/android/CreateAndroidTestContextKtTest.kt +++ b/test_runner/src/test/kotlin/ftl/run/platform/android/CreateAndroidTestContextKtTest.kt @@ -16,6 +16,7 @@ import ftl.run.model.AndroidTestShards import ftl.run.model.InstrumentationTestContext import ftl.run.model.RoboTestContext import ftl.test.util.mixedConfigYaml +import ftl.test.util.parameterizedConfigYaml import ftl.test.util.should import ftl.util.FlankTestMethod import io.mockk.every @@ -25,8 +26,7 @@ import io.mockk.mockkStatic import io.mockk.unmockkAll import kotlinx.coroutines.runBlocking import org.junit.After -import org.junit.Assert.assertEquals -import org.junit.Assert.assertTrue +import org.junit.Assert.* import org.junit.Rule import org.junit.Test import org.junit.rules.TemporaryFolder @@ -38,6 +38,8 @@ class CreateAndroidTestContextKtTest { val root = TemporaryFolder() private val args: AndroidArgs = AndroidArgs.load(mixedConfigYaml) + private val parameterizedArgs: AndroidArgs = AndroidArgs.load(parameterizedConfigYaml) + @After fun tearDown() = unmockkAll() @@ -59,8 +61,8 @@ class CreateAndroidTestContextKtTest { environmentVariables = should { equals(args.environmentVariables) }, args = should { maxTestShards == 1 && - testApk?.endsWith("app-single-success-debug-androidTest.apk") == true && - environmentVariables == args.environmentVariables + testApk?.endsWith("app-single-success-debug-androidTest.apk") == true && + environmentVariables == args.environmentVariables } ), InstrumentationTestContext( @@ -71,8 +73,8 @@ class CreateAndroidTestContextKtTest { environmentVariables = should { equals(args.environmentVariables) }, args = should { testTargets == listOf("class com.example.test_app.InstrumentedTest") && - testApk?.endsWith("app-multiple-flaky-debug-androidTest.apk") == true && - environmentVariables == args.environmentVariables + testApk?.endsWith("app-multiple-flaky-debug-androidTest.apk") == true && + environmentVariables == args.environmentVariables } ) ) @@ -279,7 +281,7 @@ class CreateAndroidTestContextKtTest { customSharding.values.forEach { customShards -> val context = instrumentationContexts.filter { it.app.local.contains(customShards.app.drop(1)) && - it.test.local.contains(customShards.test.drop(1)) + it.test.local.contains(customShards.test.drop(1)) }.run { // there should be only one context with app and test matching assertEquals(1, size) @@ -292,4 +294,46 @@ class CreateAndroidTestContextKtTest { assertTrue(customShards.shards.values.containsAll(context.shards.map { it.testMethodNames })) } } + + @Test + fun `Annotated parameterized tests cases should run when specified in test-targets`() { + val testInstrumentationContext = InstrumentationTestContext( + FileReference("", ""), + FileReference("../test_projects/android/apks/parametrized-app-debug-androidTest.apk", ""), + args = parameterizedArgs + ) + + val testFilters = TestFilters.fromTestTargets(parameterizedArgs.testTargets, emptyList()) + + val parsedTests = testInstrumentationContext + .getFlankTestMethods( + testFilters + ) + .map { it.testName } + .toSet() + + assertTrue(parsedTests.isNotEmpty()) + assertTrue(parsedTests.contains("class flank.shard.annotationbug.ParameterizedAnnotatedTest#useAppContext")) + } + + @Test + fun `Parameterized tests with custom annotation should not execute when not specified in test-targets`() { + val testInstrumentationContext = InstrumentationTestContext( + FileReference("", ""), + FileReference("../test_projects/android/apks/parametrized-app-debug-androidTest.apk", ""), + args = parameterizedArgs + ) + + val testFilters = TestFilters.fromTestTargets(parameterizedArgs.testTargets, emptyList()) + + val parsedTests = testInstrumentationContext + .getFlankTestMethods( + testFilters + ) + .map { it.testName } + .toSet() + + assertTrue(parsedTests.isNotEmpty()) + assertFalse(parsedTests.contains("class flank.shard.annotationbug.FooAnnotatedParameterizedTest#useAppContext")) + } } diff --git a/test_runner/src/test/kotlin/ftl/run/platform/android/IgnoreTestsAnnotationTest.kt b/test_runner/src/test/kotlin/ftl/run/platform/android/IgnoreTestsAnnotationTest.kt index e50c74581b..32d9795d22 100644 --- a/test_runner/src/test/kotlin/ftl/run/platform/android/IgnoreTestsAnnotationTest.kt +++ b/test_runner/src/test/kotlin/ftl/run/platform/android/IgnoreTestsAnnotationTest.kt @@ -29,7 +29,7 @@ class IgnoreTestsAnnotationTest { } @Test - fun `InstrumentationContext with @Supress annotation shouldn't have ignoredTestCases in shards`() { + fun `InstrumentationContext with @Suppress annotation shouldn't have ignoredTestCases in shards`() { val testContext = runBlocking { AndroidArgs.load(singleSuccessYaml).createAndroidTestContexts() }.single() as InstrumentationTestContext diff --git a/test_runner/src/test/kotlin/ftl/test/util/Constants.kt b/test_runner/src/test/kotlin/ftl/test/util/Constants.kt index 0ba88ff666..9960686fe8 100644 --- a/test_runner/src/test/kotlin/ftl/test/util/Constants.kt +++ b/test_runner/src/test/kotlin/ftl/test/util/Constants.kt @@ -6,3 +6,5 @@ import ftl.test.util.TestHelper.getPath internal val mixedConfigYaml = getPath("src/test/kotlin/ftl/fixtures/test_app_cases/flank-multiple-mixed.yml") internal val ios2ConfigYaml = getPath("src/test/kotlin/ftl/fixtures/flank2.ios.yml") internal val defaultTestTimeout = AndroidArgs.default().testTimeout +internal val parameterizedConfigYaml = getPath("src/test/kotlin/ftl/fixtures/test_app_cases/flank-parameterized-config.yml") + diff --git a/tool/execution/linear/src/main/kotlin/flank/exection/linear/Transform.kt b/tool/execution/linear/src/main/kotlin/flank/execution/linear/Transform.kt similarity index 97% rename from tool/execution/linear/src/main/kotlin/flank/exection/linear/Transform.kt rename to tool/execution/linear/src/main/kotlin/flank/execution/linear/Transform.kt index 89ee7e14b0..4b86cbd55e 100644 --- a/tool/execution/linear/src/main/kotlin/flank/exection/linear/Transform.kt +++ b/tool/execution/linear/src/main/kotlin/flank/execution/linear/Transform.kt @@ -1,4 +1,4 @@ -package flank.exection.linear +package flank.execution.linear import flank.log.Event import flank.log.Logger diff --git a/tool/execution/parallel/README.md b/tool/execution/parallel/README.md index fe1f19610a..c1c288b4cd 100644 --- a/tool/execution/parallel/README.md +++ b/tool/execution/parallel/README.md @@ -7,12 +7,12 @@ Library for task parallelization and asynchronous execution. * Module type - [tool](../../docs/architecture.md#tool) * Dependency type - [static](../../docs/architecture.md#static_dependencies) * Public API - * Core - [Parallel.kt](./src/main/kotlin/flank/exection/parallel/Parallel.kt) - * Execution - [Execute.kt](./src/main/kotlin/flank/exection/parallel/Execute.kt) - * Task factories DSL - [Create.kt](./src/main/kotlin/flank/exection/parallel/Create.kt) - * Graph validation - [Create.kt](./src/main/kotlin/flank/exection/parallel/Validate.kt) - * Graph reduction - [Reduce.kt](./src/main/kotlin/flank/exection/parallel/Reduce.kt) -* Example usage - [Example.kt](./src/test/kotlin/flank/exection/parallel/Example.kt) + * Core - [Parallel.kt](./src/main/kotlin/flank/execution/parallel/Parallel.kt) + * Execution - [Execute.kt](./src/main/kotlin/flank/execution/parallel/Execute.kt) + * Task factories DSL - [Create.kt](./src/main/kotlin/flank/execution/parallel/Create.kt) + * Graph validation - [Create.kt](./src/main/kotlin/flank/execution/parallel/Validate.kt) + * Graph reduction - [Reduce.kt](./src/main/kotlin/flank/execution/parallel/Reduce.kt) +* Example usage - [Example.kt](./src/test/kotlin/flank/execution/parallel/Example.kt) # Design @@ -137,10 +137,10 @@ val initial = mapOf( val flow1: Flow = execute() // For execution with arguments (initial state) -val flow2: Flow = execute(intial) +val flow2: Flow = execute(initial) // For execution reduced to selected types with dependencies. -val flow3: Flow = execute(Bar, Baz)(intial) +val flow3: Flow = execute(Bar, Baz)(initial) ``` ### Process diff --git a/tool/execution/parallel/plantuml/src/main/kotlin/flank/exection/parallel/plantuml/PlantUml.kt b/tool/execution/parallel/plantuml/src/main/kotlin/flank/execution/parallel/plantuml/PlantUml.kt similarity index 87% rename from tool/execution/parallel/plantuml/src/main/kotlin/flank/exection/parallel/plantuml/PlantUml.kt rename to tool/execution/parallel/plantuml/src/main/kotlin/flank/execution/parallel/plantuml/PlantUml.kt index 561c79df14..40d69c74ca 100644 --- a/tool/execution/parallel/plantuml/src/main/kotlin/flank/exection/parallel/plantuml/PlantUml.kt +++ b/tool/execution/parallel/plantuml/src/main/kotlin/flank/execution/parallel/plantuml/PlantUml.kt @@ -1,8 +1,8 @@ -package flank.exection.parallel.plantuml +package flank.execution.parallel.plantuml -import flank.exection.parallel.Tasks -import flank.exection.parallel.plantuml.internal.generatePlanUmlFile -import flank.exection.parallel.plantuml.internal.generatePlantUmlString +import flank.execution.parallel.Tasks +import flank.execution.parallel.plantuml.internal.generatePlanUmlFile +import flank.execution.parallel.plantuml.internal.generatePlantUmlString import java.io.File /** diff --git a/tool/execution/parallel/plantuml/src/main/kotlin/flank/exection/parallel/plantuml/internal/GeneratePlantUmlFile.kt b/tool/execution/parallel/plantuml/src/main/kotlin/flank/execution/parallel/plantuml/internal/GeneratePlantUmlFile.kt similarity index 74% rename from tool/execution/parallel/plantuml/src/main/kotlin/flank/exection/parallel/plantuml/internal/GeneratePlantUmlFile.kt rename to tool/execution/parallel/plantuml/src/main/kotlin/flank/execution/parallel/plantuml/internal/GeneratePlantUmlFile.kt index 0d4d0eff62..de696cde97 100644 --- a/tool/execution/parallel/plantuml/src/main/kotlin/flank/exection/parallel/plantuml/internal/GeneratePlantUmlFile.kt +++ b/tool/execution/parallel/plantuml/src/main/kotlin/flank/execution/parallel/plantuml/internal/GeneratePlantUmlFile.kt @@ -1,6 +1,6 @@ -package flank.exection.parallel.plantuml.internal +package flank.execution.parallel.plantuml.internal -import flank.exection.parallel.Tasks +import flank.execution.parallel.Tasks import java.io.File internal fun generatePlanUmlFile( diff --git a/tool/execution/parallel/plantuml/src/main/kotlin/flank/exection/parallel/plantuml/internal/GeneratePlantUmlString.kt b/tool/execution/parallel/plantuml/src/main/kotlin/flank/execution/parallel/plantuml/internal/GeneratePlantUmlString.kt similarity index 95% rename from tool/execution/parallel/plantuml/src/main/kotlin/flank/exection/parallel/plantuml/internal/GeneratePlantUmlString.kt rename to tool/execution/parallel/plantuml/src/main/kotlin/flank/execution/parallel/plantuml/internal/GeneratePlantUmlString.kt index 37f8f51405..17e56355b6 100644 --- a/tool/execution/parallel/plantuml/src/main/kotlin/flank/exection/parallel/plantuml/internal/GeneratePlantUmlString.kt +++ b/tool/execution/parallel/plantuml/src/main/kotlin/flank/execution/parallel/plantuml/internal/GeneratePlantUmlString.kt @@ -1,7 +1,7 @@ -package flank.exection.parallel.plantuml.internal +package flank.execution.parallel.plantuml.internal -import flank.exection.parallel.Parallel -import flank.exection.parallel.Tasks +import flank.execution.parallel.Parallel +import flank.execution.parallel.Tasks import java.awt.Color // =================== Internal API =================== diff --git a/tool/execution/parallel/src/main/kotlin/flank/exection/parallel/Create.kt b/tool/execution/parallel/src/main/kotlin/flank/execution/parallel/Create.kt similarity index 93% rename from tool/execution/parallel/src/main/kotlin/flank/exection/parallel/Create.kt rename to tool/execution/parallel/src/main/kotlin/flank/execution/parallel/Create.kt index f16e71ed9f..784d5468cc 100644 --- a/tool/execution/parallel/src/main/kotlin/flank/exection/parallel/Create.kt +++ b/tool/execution/parallel/src/main/kotlin/flank/execution/parallel/Create.kt @@ -1,7 +1,7 @@ -package flank.exection.parallel +package flank.execution.parallel -import flank.exection.parallel.internal.DynamicType -import flank.exection.parallel.internal.EagerProperties +import flank.execution.parallel.internal.DynamicType +import flank.execution.parallel.internal.EagerProperties // ======================= Signature ======================= diff --git a/tool/execution/parallel/src/main/kotlin/flank/exection/parallel/Execute.kt b/tool/execution/parallel/src/main/kotlin/flank/execution/parallel/Execute.kt similarity index 76% rename from tool/execution/parallel/src/main/kotlin/flank/exection/parallel/Execute.kt rename to tool/execution/parallel/src/main/kotlin/flank/execution/parallel/Execute.kt index e307a55ffb..68dc0b9394 100644 --- a/tool/execution/parallel/src/main/kotlin/flank/exection/parallel/Execute.kt +++ b/tool/execution/parallel/src/main/kotlin/flank/execution/parallel/Execute.kt @@ -1,8 +1,8 @@ -package flank.exection.parallel +package flank.execution.parallel -import flank.exection.parallel.internal.Execution -import flank.exection.parallel.internal.invoke -import flank.exection.parallel.internal.minusContextValidators +import flank.execution.parallel.internal.Execution +import flank.execution.parallel.internal.invoke +import flank.execution.parallel.internal.minusContextValidators import kotlinx.coroutines.flow.Flow /** diff --git a/tool/execution/parallel/src/main/kotlin/flank/exection/parallel/Parallel.kt b/tool/execution/parallel/src/main/kotlin/flank/execution/parallel/Parallel.kt similarity index 95% rename from tool/execution/parallel/src/main/kotlin/flank/exection/parallel/Parallel.kt rename to tool/execution/parallel/src/main/kotlin/flank/execution/parallel/Parallel.kt index 61d41e7035..3cd7909320 100644 --- a/tool/execution/parallel/src/main/kotlin/flank/exection/parallel/Parallel.kt +++ b/tool/execution/parallel/src/main/kotlin/flank/execution/parallel/Parallel.kt @@ -1,8 +1,8 @@ -package flank.exection.parallel +package flank.execution.parallel -import flank.exection.parallel.internal.ContextProvider -import flank.exection.parallel.internal.EagerProperties -import flank.exection.parallel.internal.lazyProperty +import flank.execution.parallel.internal.ContextProvider +import flank.execution.parallel.internal.EagerProperties +import flank.execution.parallel.internal.lazyProperty import flank.log.Output // ======================= Types ======================= diff --git a/tool/execution/parallel/src/main/kotlin/flank/exection/parallel/Reduce.kt b/tool/execution/parallel/src/main/kotlin/flank/execution/parallel/Reduce.kt similarity index 79% rename from tool/execution/parallel/src/main/kotlin/flank/exection/parallel/Reduce.kt rename to tool/execution/parallel/src/main/kotlin/flank/execution/parallel/Reduce.kt index 91ad2d2faf..28ebcd7ec6 100644 --- a/tool/execution/parallel/src/main/kotlin/flank/exection/parallel/Reduce.kt +++ b/tool/execution/parallel/src/main/kotlin/flank/execution/parallel/Reduce.kt @@ -1,8 +1,8 @@ -package flank.exection.parallel +package flank.execution.parallel -import flank.exection.parallel.internal.contextValidatorTypes -import flank.exection.parallel.internal.reduceTo -import flank.exection.parallel.internal.type +import flank.execution.parallel.internal.contextValidatorTypes +import flank.execution.parallel.internal.reduceTo +import flank.execution.parallel.internal.type /** * Reduce given [Tasks] by [expected] types to remove unneeded tasks from the graph. diff --git a/tool/execution/parallel/src/main/kotlin/flank/exection/parallel/Select.kt b/tool/execution/parallel/src/main/kotlin/flank/execution/parallel/Select.kt similarity index 81% rename from tool/execution/parallel/src/main/kotlin/flank/exection/parallel/Select.kt rename to tool/execution/parallel/src/main/kotlin/flank/execution/parallel/Select.kt index 4e2dcf99d3..69b0b85ae4 100644 --- a/tool/execution/parallel/src/main/kotlin/flank/exection/parallel/Select.kt +++ b/tool/execution/parallel/src/main/kotlin/flank/execution/parallel/Select.kt @@ -1,4 +1,4 @@ -package flank.exection.parallel +package flank.execution.parallel /** * Select value by type. diff --git a/tool/execution/parallel/src/main/kotlin/flank/exection/parallel/Validate.kt b/tool/execution/parallel/src/main/kotlin/flank/execution/parallel/Validate.kt similarity index 78% rename from tool/execution/parallel/src/main/kotlin/flank/exection/parallel/Validate.kt rename to tool/execution/parallel/src/main/kotlin/flank/execution/parallel/Validate.kt index de08d0636a..d0ab2e292a 100644 --- a/tool/execution/parallel/src/main/kotlin/flank/exection/parallel/Validate.kt +++ b/tool/execution/parallel/src/main/kotlin/flank/execution/parallel/Validate.kt @@ -1,6 +1,6 @@ -package flank.exection.parallel +package flank.execution.parallel -import flank.exection.parallel.internal.validateExecutionGraphs +import flank.execution.parallel.internal.validateExecutionGraphs /** * Validate the given [Tasks] and [ParallelState] for finding missing dependencies or broken paths. diff --git a/tool/execution/parallel/src/main/kotlin/flank/exection/parallel/Verify.kt b/tool/execution/parallel/src/main/kotlin/flank/execution/parallel/Verify.kt similarity index 57% rename from tool/execution/parallel/src/main/kotlin/flank/exection/parallel/Verify.kt rename to tool/execution/parallel/src/main/kotlin/flank/execution/parallel/Verify.kt index b98d23eb93..ea84cfbede 100644 --- a/tool/execution/parallel/src/main/kotlin/flank/exection/parallel/Verify.kt +++ b/tool/execution/parallel/src/main/kotlin/flank/execution/parallel/Verify.kt @@ -1,6 +1,6 @@ -package flank.exection.parallel +package flank.execution.parallel -import flank.exection.parallel.internal.checkThrowableValues +import flank.execution.parallel.internal.checkThrowableValues /** * Verify that given [ParallelState] has no errors. diff --git a/tool/execution/parallel/src/main/kotlin/flank/exection/parallel/internal/ContextProvider.kt b/tool/execution/parallel/src/main/kotlin/flank/execution/parallel/internal/ContextProvider.kt similarity index 70% rename from tool/execution/parallel/src/main/kotlin/flank/exection/parallel/internal/ContextProvider.kt rename to tool/execution/parallel/src/main/kotlin/flank/execution/parallel/internal/ContextProvider.kt index c9646fac7e..efb38f8456 100644 --- a/tool/execution/parallel/src/main/kotlin/flank/exection/parallel/internal/ContextProvider.kt +++ b/tool/execution/parallel/src/main/kotlin/flank/execution/parallel/internal/ContextProvider.kt @@ -1,9 +1,9 @@ -package flank.exection.parallel.internal +package flank.execution.parallel.internal -import flank.exection.parallel.ExecuteTask -import flank.exection.parallel.Parallel -import flank.exection.parallel.ParallelState -import flank.exection.parallel.validator +import flank.execution.parallel.ExecuteTask +import flank.execution.parallel.Parallel +import flank.execution.parallel.ParallelState +import flank.execution.parallel.validator /** * Abstract factory for wrapping state into context and creating task function. diff --git a/tool/execution/parallel/src/main/kotlin/flank/exection/parallel/internal/DynamicType.kt b/tool/execution/parallel/src/main/kotlin/flank/execution/parallel/internal/DynamicType.kt similarity index 78% rename from tool/execution/parallel/src/main/kotlin/flank/exection/parallel/internal/DynamicType.kt rename to tool/execution/parallel/src/main/kotlin/flank/execution/parallel/internal/DynamicType.kt index e4d0a4c957..4d707dd534 100644 --- a/tool/execution/parallel/src/main/kotlin/flank/exection/parallel/internal/DynamicType.kt +++ b/tool/execution/parallel/src/main/kotlin/flank/execution/parallel/internal/DynamicType.kt @@ -1,6 +1,6 @@ -package flank.exection.parallel.internal +package flank.execution.parallel.internal -import flank.exection.parallel.Parallel +import flank.execution.parallel.Parallel internal class DynamicType(val type: Class) : Parallel.Type { override fun equals(other: Any?): Boolean = (other as? DynamicType<*>)?.type == type diff --git a/tool/execution/parallel/src/main/kotlin/flank/exection/parallel/internal/Execution.kt b/tool/execution/parallel/src/main/kotlin/flank/execution/parallel/internal/Execution.kt similarity index 95% rename from tool/execution/parallel/src/main/kotlin/flank/exection/parallel/internal/Execution.kt rename to tool/execution/parallel/src/main/kotlin/flank/execution/parallel/internal/Execution.kt index bfd2cceaca..5ad2f97a47 100644 --- a/tool/execution/parallel/src/main/kotlin/flank/exection/parallel/internal/Execution.kt +++ b/tool/execution/parallel/src/main/kotlin/flank/execution/parallel/internal/Execution.kt @@ -1,12 +1,12 @@ -package flank.exection.parallel.internal - -import flank.exection.parallel.Parallel -import flank.exection.parallel.Parallel.Logger -import flank.exection.parallel.Parallel.Task -import flank.exection.parallel.Parallel.Type -import flank.exection.parallel.ParallelState -import flank.exection.parallel.Property -import flank.exection.parallel.Tasks +package flank.execution.parallel.internal + +import flank.execution.parallel.Parallel +import flank.execution.parallel.Parallel.Logger +import flank.execution.parallel.Parallel.Task +import flank.execution.parallel.Parallel.Type +import flank.execution.parallel.ParallelState +import flank.execution.parallel.Property +import flank.execution.parallel.Tasks import flank.log.Event import flank.log.Output import flank.log.event diff --git a/tool/execution/parallel/src/main/kotlin/flank/exection/parallel/internal/Ext.kt b/tool/execution/parallel/src/main/kotlin/flank/execution/parallel/internal/Ext.kt similarity index 62% rename from tool/execution/parallel/src/main/kotlin/flank/exection/parallel/internal/Ext.kt rename to tool/execution/parallel/src/main/kotlin/flank/execution/parallel/internal/Ext.kt index 53a2e7cc5c..1cd3c54ca8 100644 --- a/tool/execution/parallel/src/main/kotlin/flank/exection/parallel/internal/Ext.kt +++ b/tool/execution/parallel/src/main/kotlin/flank/execution/parallel/internal/Ext.kt @@ -1,6 +1,6 @@ -package flank.exection.parallel.internal +package flank.execution.parallel.internal -import flank.exection.parallel.Parallel +import flank.execution.parallel.Parallel internal val Parallel.Task.type get() = signature.type internal val Parallel.Task.args get() = signature.args diff --git a/tool/execution/parallel/src/main/kotlin/flank/exection/parallel/internal/Prepare.kt b/tool/execution/parallel/src/main/kotlin/flank/execution/parallel/internal/Prepare.kt similarity index 83% rename from tool/execution/parallel/src/main/kotlin/flank/exection/parallel/internal/Prepare.kt rename to tool/execution/parallel/src/main/kotlin/flank/execution/parallel/internal/Prepare.kt index c78b7d0bd4..2c68587388 100644 --- a/tool/execution/parallel/src/main/kotlin/flank/exection/parallel/internal/Prepare.kt +++ b/tool/execution/parallel/src/main/kotlin/flank/execution/parallel/internal/Prepare.kt @@ -1,7 +1,7 @@ -package flank.exection.parallel.internal +package flank.execution.parallel.internal -import flank.exection.parallel.Parallel -import flank.exection.parallel.Tasks +import flank.execution.parallel.Parallel +import flank.execution.parallel.Tasks /** * Get initial state validators. diff --git a/tool/execution/parallel/src/main/kotlin/flank/exection/parallel/internal/Property.kt b/tool/execution/parallel/src/main/kotlin/flank/execution/parallel/internal/Property.kt similarity index 90% rename from tool/execution/parallel/src/main/kotlin/flank/exection/parallel/internal/Property.kt rename to tool/execution/parallel/src/main/kotlin/flank/execution/parallel/internal/Property.kt index a6c7dd523d..521d2c1276 100644 --- a/tool/execution/parallel/src/main/kotlin/flank/exection/parallel/internal/Property.kt +++ b/tool/execution/parallel/src/main/kotlin/flank/execution/parallel/internal/Property.kt @@ -1,7 +1,7 @@ -package flank.exection.parallel.internal +package flank.execution.parallel.internal -import flank.exection.parallel.Parallel -import flank.exection.parallel.ParallelState +import flank.execution.parallel.Parallel +import flank.execution.parallel.ParallelState /** * Factory function for lazy property delegate. diff --git a/tool/execution/parallel/src/main/kotlin/flank/exection/parallel/internal/Reduce.kt b/tool/execution/parallel/src/main/kotlin/flank/execution/parallel/internal/Reduce.kt similarity index 70% rename from tool/execution/parallel/src/main/kotlin/flank/exection/parallel/internal/Reduce.kt rename to tool/execution/parallel/src/main/kotlin/flank/execution/parallel/internal/Reduce.kt index 0f0aaae4c9..d850a228ad 100644 --- a/tool/execution/parallel/src/main/kotlin/flank/exection/parallel/internal/Reduce.kt +++ b/tool/execution/parallel/src/main/kotlin/flank/execution/parallel/internal/Reduce.kt @@ -1,9 +1,9 @@ -package flank.exection.parallel.internal +package flank.execution.parallel.internal -import flank.exection.parallel.Parallel.Task -import flank.exection.parallel.Parallel.Type -import flank.exection.parallel.Tasks -import flank.exection.parallel.internal.graph.findDependenciesIn +import flank.execution.parallel.Parallel.Task +import flank.execution.parallel.Parallel.Type +import flank.execution.parallel.Tasks +import flank.execution.parallel.internal.graph.findDependenciesIn internal infix fun Tasks.reduceTo( expected: Set> diff --git a/tool/execution/parallel/src/main/kotlin/flank/exection/parallel/internal/Validate.kt b/tool/execution/parallel/src/main/kotlin/flank/execution/parallel/internal/Validate.kt similarity index 75% rename from tool/execution/parallel/src/main/kotlin/flank/exection/parallel/internal/Validate.kt rename to tool/execution/parallel/src/main/kotlin/flank/execution/parallel/internal/Validate.kt index f68ecd9e7a..ea5ec5cacc 100644 --- a/tool/execution/parallel/src/main/kotlin/flank/exection/parallel/internal/Validate.kt +++ b/tool/execution/parallel/src/main/kotlin/flank/execution/parallel/internal/Validate.kt @@ -1,11 +1,11 @@ -package flank.exection.parallel.internal - -import flank.exection.parallel.Parallel -import flank.exection.parallel.ParallelState -import flank.exection.parallel.Tasks -import flank.exection.parallel.internal.graph.findCycles -import flank.exection.parallel.internal.graph.findDuplicatedDependencies -import flank.exection.parallel.internal.graph.findMissingDependencies +package flank.execution.parallel.internal + +import flank.execution.parallel.Parallel +import flank.execution.parallel.ParallelState +import flank.execution.parallel.Tasks +import flank.execution.parallel.internal.graph.findCycles +import flank.execution.parallel.internal.graph.findDuplicatedDependencies +import flank.execution.parallel.internal.graph.findMissingDependencies import kotlinx.coroutines.runBlocking // TODO: Check all cases and collect results, instead of throwing the first encountered error. diff --git a/tool/execution/parallel/src/main/kotlin/flank/exection/parallel/internal/Verify.kt b/tool/execution/parallel/src/main/kotlin/flank/execution/parallel/internal/Verify.kt similarity index 60% rename from tool/execution/parallel/src/main/kotlin/flank/exection/parallel/internal/Verify.kt rename to tool/execution/parallel/src/main/kotlin/flank/execution/parallel/internal/Verify.kt index f97f57a3c0..b1535111ef 100644 --- a/tool/execution/parallel/src/main/kotlin/flank/exection/parallel/internal/Verify.kt +++ b/tool/execution/parallel/src/main/kotlin/flank/execution/parallel/internal/Verify.kt @@ -1,6 +1,6 @@ -package flank.exection.parallel.internal +package flank.execution.parallel.internal -import flank.exection.parallel.ParallelState +import flank.execution.parallel.ParallelState internal fun ParallelState.checkThrowableValues(): ParallelState = onEach { (_, value) -> if (value is Throwable) throw value } diff --git a/tool/execution/parallel/src/main/kotlin/flank/exection/parallel/internal/graph/FindCycles.kt b/tool/execution/parallel/src/main/kotlin/flank/execution/parallel/internal/graph/FindCycles.kt similarity index 96% rename from tool/execution/parallel/src/main/kotlin/flank/exection/parallel/internal/graph/FindCycles.kt rename to tool/execution/parallel/src/main/kotlin/flank/execution/parallel/internal/graph/FindCycles.kt index 5cfac23416..540c70d488 100644 --- a/tool/execution/parallel/src/main/kotlin/flank/exection/parallel/internal/graph/FindCycles.kt +++ b/tool/execution/parallel/src/main/kotlin/flank/execution/parallel/internal/graph/FindCycles.kt @@ -1,4 +1,4 @@ -package flank.exection.parallel.internal.graph +package flank.execution.parallel.internal.graph /** * Find cycles in given graph. diff --git a/tool/execution/parallel/src/main/kotlin/flank/exection/parallel/internal/graph/FindDependencies.kt b/tool/execution/parallel/src/main/kotlin/flank/execution/parallel/internal/graph/FindDependencies.kt similarity index 94% rename from tool/execution/parallel/src/main/kotlin/flank/exection/parallel/internal/graph/FindDependencies.kt rename to tool/execution/parallel/src/main/kotlin/flank/execution/parallel/internal/graph/FindDependencies.kt index fbb288a093..51540b6c7c 100644 --- a/tool/execution/parallel/src/main/kotlin/flank/exection/parallel/internal/graph/FindDependencies.kt +++ b/tool/execution/parallel/src/main/kotlin/flank/execution/parallel/internal/graph/FindDependencies.kt @@ -1,4 +1,4 @@ -package flank.exection.parallel.internal.graph +package flank.execution.parallel.internal.graph /** * Find dependencies for given nodes in [graph]. diff --git a/tool/execution/parallel/src/main/kotlin/flank/exection/parallel/internal/graph/FindDuplicatedDependencies.kt b/tool/execution/parallel/src/main/kotlin/flank/execution/parallel/internal/graph/FindDuplicatedDependencies.kt similarity index 81% rename from tool/execution/parallel/src/main/kotlin/flank/exection/parallel/internal/graph/FindDuplicatedDependencies.kt rename to tool/execution/parallel/src/main/kotlin/flank/execution/parallel/internal/graph/FindDuplicatedDependencies.kt index 242c9942ec..77f5fcac1a 100644 --- a/tool/execution/parallel/src/main/kotlin/flank/exection/parallel/internal/graph/FindDuplicatedDependencies.kt +++ b/tool/execution/parallel/src/main/kotlin/flank/execution/parallel/internal/graph/FindDuplicatedDependencies.kt @@ -1,4 +1,4 @@ -package flank.exection.parallel.internal.graph +package flank.execution.parallel.internal.graph internal fun List.findDuplicatedDependencies( initial: Set diff --git a/tool/execution/parallel/src/main/kotlin/flank/exection/parallel/internal/graph/FindMissingDependencies.kt b/tool/execution/parallel/src/main/kotlin/flank/execution/parallel/internal/graph/FindMissingDependencies.kt similarity index 82% rename from tool/execution/parallel/src/main/kotlin/flank/exection/parallel/internal/graph/FindMissingDependencies.kt rename to tool/execution/parallel/src/main/kotlin/flank/execution/parallel/internal/graph/FindMissingDependencies.kt index 5e281e3212..ae5aa41539 100644 --- a/tool/execution/parallel/src/main/kotlin/flank/exection/parallel/internal/graph/FindMissingDependencies.kt +++ b/tool/execution/parallel/src/main/kotlin/flank/execution/parallel/internal/graph/FindMissingDependencies.kt @@ -1,4 +1,4 @@ -package flank.exection.parallel.internal.graph +package flank.execution.parallel.internal.graph internal fun Map>.findMissingDependencies( initial: Set diff --git a/tool/execution/parallel/src/test/kotlin/flank/exection/parallel/Example.kt b/tool/execution/parallel/src/test/kotlin/flank/execution/parallel/Example.kt similarity index 94% rename from tool/execution/parallel/src/test/kotlin/flank/exection/parallel/Example.kt rename to tool/execution/parallel/src/test/kotlin/flank/execution/parallel/Example.kt index 4ef945f9e9..4996b3e281 100644 --- a/tool/execution/parallel/src/test/kotlin/flank/exection/parallel/Example.kt +++ b/tool/execution/parallel/src/test/kotlin/flank/execution/parallel/Example.kt @@ -1,9 +1,9 @@ -package flank.exection.parallel +package flank.execution.parallel -import flank.exection.parallel.Example.Args -import flank.exection.parallel.Example.Hello -import flank.exection.parallel.Example.Summary -import flank.exection.parallel.Parallel.Type +import flank.execution.parallel.Example.Args +import flank.execution.parallel.Example.Hello +import flank.execution.parallel.Example.Summary +import flank.execution.parallel.Parallel.Type import kotlinx.coroutines.delay import kotlinx.coroutines.flow.asFlow import kotlinx.coroutines.flow.collect diff --git a/tool/execution/parallel/src/test/kotlin/flank/exection/parallel/ExecuteKtTest.kt b/tool/execution/parallel/src/test/kotlin/flank/execution/parallel/ExecuteKtTest.kt similarity index 99% rename from tool/execution/parallel/src/test/kotlin/flank/exection/parallel/ExecuteKtTest.kt rename to tool/execution/parallel/src/test/kotlin/flank/execution/parallel/ExecuteKtTest.kt index e7432bcb72..bb2a6a7b1a 100644 --- a/tool/execution/parallel/src/test/kotlin/flank/exection/parallel/ExecuteKtTest.kt +++ b/tool/execution/parallel/src/test/kotlin/flank/execution/parallel/ExecuteKtTest.kt @@ -1,4 +1,4 @@ -package flank.exection.parallel +package flank.execution.parallel import kotlinx.coroutines.CancellationException import kotlinx.coroutines.delay diff --git a/tool/execution/parallel/src/test/kotlin/flank/exection/parallel/ReduceKtTest.kt b/tool/execution/parallel/src/test/kotlin/flank/execution/parallel/ReduceKtTest.kt similarity index 92% rename from tool/execution/parallel/src/test/kotlin/flank/exection/parallel/ReduceKtTest.kt rename to tool/execution/parallel/src/test/kotlin/flank/execution/parallel/ReduceKtTest.kt index d5d2314b0e..3b6671deba 100644 --- a/tool/execution/parallel/src/test/kotlin/flank/exection/parallel/ReduceKtTest.kt +++ b/tool/execution/parallel/src/test/kotlin/flank/execution/parallel/ReduceKtTest.kt @@ -1,6 +1,6 @@ -package flank.exection.parallel +package flank.execution.parallel -import flank.exection.parallel.internal.type +import flank.execution.parallel.internal.type import org.junit.Assert import org.junit.Test diff --git a/tool/execution/parallel/src/test/kotlin/flank/exection/parallel/ValidateKtTest.kt b/tool/execution/parallel/src/test/kotlin/flank/execution/parallel/ValidateKtTest.kt similarity index 99% rename from tool/execution/parallel/src/test/kotlin/flank/exection/parallel/ValidateKtTest.kt rename to tool/execution/parallel/src/test/kotlin/flank/execution/parallel/ValidateKtTest.kt index 4e2299bd59..e9b89b6e3d 100644 --- a/tool/execution/parallel/src/test/kotlin/flank/exection/parallel/ValidateKtTest.kt +++ b/tool/execution/parallel/src/test/kotlin/flank/execution/parallel/ValidateKtTest.kt @@ -1,4 +1,4 @@ -package flank.exection.parallel +package flank.execution.parallel import org.junit.Assert.assertEquals import org.junit.Assert.fail diff --git a/tool/execution/parallel/src/test/kotlin/flank/exection/parallel/benchmark/Execute.kt b/tool/execution/parallel/src/test/kotlin/flank/execution/parallel/benchmark/Execute.kt similarity index 71% rename from tool/execution/parallel/src/test/kotlin/flank/exection/parallel/benchmark/Execute.kt rename to tool/execution/parallel/src/test/kotlin/flank/execution/parallel/benchmark/Execute.kt index 1db61c662c..ede4ded15f 100644 --- a/tool/execution/parallel/src/test/kotlin/flank/exection/parallel/benchmark/Execute.kt +++ b/tool/execution/parallel/src/test/kotlin/flank/execution/parallel/benchmark/Execute.kt @@ -1,11 +1,11 @@ -package flank.exection.parallel.benchmark - -import flank.exection.parallel.Parallel -import flank.exection.parallel.Tasks -import flank.exection.parallel.from -import flank.exection.parallel.internal.args -import flank.exection.parallel.invoke -import flank.exection.parallel.using +package flank.execution.parallel.benchmark + +import flank.execution.parallel.Parallel +import flank.execution.parallel.Tasks +import flank.execution.parallel.from +import flank.execution.parallel.internal.args +import flank.execution.parallel.invoke +import flank.execution.parallel.using import kotlinx.coroutines.runBlocking import kotlin.system.measureTimeMillis diff --git a/tool/execution/parallel/src/test/kotlin/flank/exection/parallel/benchmark/Reduce.kt b/tool/execution/parallel/src/test/kotlin/flank/execution/parallel/benchmark/Reduce.kt similarity index 71% rename from tool/execution/parallel/src/test/kotlin/flank/exection/parallel/benchmark/Reduce.kt rename to tool/execution/parallel/src/test/kotlin/flank/execution/parallel/benchmark/Reduce.kt index 05dcf5b80a..c1f3c8bccc 100644 --- a/tool/execution/parallel/src/test/kotlin/flank/exection/parallel/benchmark/Reduce.kt +++ b/tool/execution/parallel/src/test/kotlin/flank/execution/parallel/benchmark/Reduce.kt @@ -1,11 +1,11 @@ -package flank.exection.parallel.benchmark - -import flank.exection.parallel.Parallel -import flank.exection.parallel.Tasks -import flank.exection.parallel.from -import flank.exection.parallel.internal.args -import flank.exection.parallel.invoke -import flank.exection.parallel.using +package flank.execution.parallel.benchmark + +import flank.execution.parallel.Parallel +import flank.execution.parallel.Tasks +import flank.execution.parallel.from +import flank.execution.parallel.internal.args +import flank.execution.parallel.invoke +import flank.execution.parallel.using import kotlin.system.measureTimeMillis fun main() { diff --git a/tool/execution/parallel/src/test/kotlin/flank/exection/parallel/benchmark/Validate.kt b/tool/execution/parallel/src/test/kotlin/flank/execution/parallel/benchmark/Validate.kt similarity index 69% rename from tool/execution/parallel/src/test/kotlin/flank/exection/parallel/benchmark/Validate.kt rename to tool/execution/parallel/src/test/kotlin/flank/execution/parallel/benchmark/Validate.kt index 68d27a92f8..0cfd5cfc7c 100644 --- a/tool/execution/parallel/src/test/kotlin/flank/exection/parallel/benchmark/Validate.kt +++ b/tool/execution/parallel/src/test/kotlin/flank/execution/parallel/benchmark/Validate.kt @@ -1,11 +1,11 @@ -package flank.exection.parallel.benchmark - -import flank.exection.parallel.Parallel -import flank.exection.parallel.Tasks -import flank.exection.parallel.from -import flank.exection.parallel.internal.args -import flank.exection.parallel.using -import flank.exection.parallel.validate +package flank.execution.parallel.benchmark + +import flank.execution.parallel.Parallel +import flank.execution.parallel.Tasks +import flank.execution.parallel.from +import flank.execution.parallel.internal.args +import flank.execution.parallel.using +import flank.execution.parallel.validate import kotlin.system.measureTimeMillis fun main() { diff --git a/tool/execution/parallel/src/test/kotlin/flank/exection/parallel/internal/graph/FindCyclesKtTest.kt b/tool/execution/parallel/src/test/kotlin/flank/execution/parallel/internal/graph/FindCyclesKtTest.kt similarity index 98% rename from tool/execution/parallel/src/test/kotlin/flank/exection/parallel/internal/graph/FindCyclesKtTest.kt rename to tool/execution/parallel/src/test/kotlin/flank/execution/parallel/internal/graph/FindCyclesKtTest.kt index 90b58e5ce2..cc5ded1918 100644 --- a/tool/execution/parallel/src/test/kotlin/flank/exection/parallel/internal/graph/FindCyclesKtTest.kt +++ b/tool/execution/parallel/src/test/kotlin/flank/execution/parallel/internal/graph/FindCyclesKtTest.kt @@ -1,4 +1,4 @@ -package flank.exection.parallel.internal.graph +package flank.execution.parallel.internal.graph import org.junit.Assert.assertEquals import org.junit.Test diff --git a/tool/junit/src/main/kotlin/flank/junit/JUnit.kt b/tool/junit/src/main/kotlin/flank/junit/JUnit.kt index 90fa34ad57..f2f749b053 100644 --- a/tool/junit/src/main/kotlin/flank/junit/JUnit.kt +++ b/tool/junit/src/main/kotlin/flank/junit/JUnit.kt @@ -28,7 +28,7 @@ fun List.generateJUnitReport(): JUnit.Report = JUnit.Report(mapToTestSuites()) /** - * Write JUnite report as formatted XML string. + * Write JUnit report as formatted XML string. * * @receiver Structural representation of XML JUnit report. * @param writer The output where report will be written. diff --git a/tool/junit/src/test/resources/JUnit.xsd b/tool/junit/src/test/resources/JUnit.xsd index 6724d9b82b..d8ca29df48 100644 --- a/tool/junit/src/test/resources/JUnit.xsd +++ b/tool/junit/src/test/resources/JUnit.xsd @@ -45,7 +45,7 @@ - Contains the results of exexuting a testsuite + Contains the results of executing a testsuite @@ -87,7 +87,7 @@ - The type of error that occured. e.g., if a java execption is thrown the full class name of the exception. + The type of error that occurred. e.g., if a java exception is thrown the full class name of the exception.