diff --git a/.github/workflows/ci-changed-examples.yml b/.github/workflows/ci-changed-examples.yml new file mode 100644 index 000000000..f767ba870 --- /dev/null +++ b/.github/workflows/ci-changed-examples.yml @@ -0,0 +1,31 @@ +name: CI Changed Examples + +on: + push: + branches: + - main + pull_request: + branches: + - main + +jobs: + get-example-changed: + uses: ./.github/workflows/get-example-changed.yml + + get-matrix: + needs: [get-example-changed] + uses: ./.github/workflows/get-changed-examples-matrix.yml + with: + example_changed: ${{ fromJSON(needs.get-example-changed.outputs.example_changed) }} + + test: + name: CI + needs: [get-example-changed, get-matrix] + if: needs.get-example-changed.outputs.example_changed == 'true' + strategy: + matrix: ${{ fromJSON(needs.get-matrix.outputs.matrix) }} + fail-fast: false + uses: ./.github/workflows/run-cargo-make-task.yml + with: + directory: ${{ matrix.directory }} + cargo_make_task: "ci" diff --git a/.github/workflows/verify-changed-examples.yml b/.github/workflows/get-changed-examples-matrix.yml similarity index 55% rename from .github/workflows/verify-changed-examples.yml rename to .github/workflows/get-changed-examples-matrix.yml index 8a369eecd..591f251c1 100644 --- a/.github/workflows/verify-changed-examples.yml +++ b/.github/workflows/get-changed-examples-matrix.yml @@ -1,16 +1,20 @@ -name: Verify Changed Examples +name: Changed Examples Matrix Call on: - push: - branches: - - main - pull_request: - branches: - - main + workflow_call: + inputs: + example_changed: + description: "Example Changed" + required: true + type: boolean + outputs: + matrix: + description: "Matrix" + value: ${{ jobs.get-example-changed.outputs.matrix }} jobs: - setup: - name: Get Changes + get-example-changed: + name: Get Changed Example Matrix runs-on: ubuntu-latest outputs: matrix: ${{ steps.set-matrix.outputs.matrix }} @@ -20,16 +24,6 @@ jobs: with: fetch-depth: 0 - - name: Get all example files that changed - id: changed-files - uses: tj-actions/changed-files@v36 - with: - files: | - examples - - - name: List all example files that changed - run: echo '${{ steps.changed-files.outputs.all_changed_files }}' - - name: Get example project directories that changed id: changed-dirs uses: tj-actions/changed-files@v36 @@ -51,21 +45,10 @@ jobs: - name: Set Matrix id: set-matrix run: | - if [ ${{ steps.changed-files.outputs.any_changed }} == 'true' ]; then + if [ ${{ inputs.example_changed }} == 'true' ]; then # Create matrix with changed directories echo "matrix={\"directory\":${{ steps.changed-dirs.outputs.all_changed_files }}}" >> "$GITHUB_OUTPUT" else # Create matrix with one item to prevent an empty vector error - echo "matrix={\"directory\":[\"INTERNAL\"]}" >> "$GITHUB_OUTPUT" + echo "matrix={\"directory\":[\"NO_CHANGE\"]}" >> "$GITHUB_OUTPUT" fi - - matrix-job: - name: Verify - needs: [setup] - strategy: - matrix: ${{ fromJSON(needs.setup.outputs.matrix) }} - fail-fast: false - uses: ./.github/workflows/run-cargo-make-task.yml - with: - directory: ${{ matrix.directory }} - cargo_make_task: "verify-flow" diff --git a/.github/workflows/get-example-changed.yml b/.github/workflows/get-example-changed.yml new file mode 100644 index 000000000..56a86f0db --- /dev/null +++ b/.github/workflows/get-example-changed.yml @@ -0,0 +1,39 @@ +name: Examples Changed Call + +on: + workflow_call: + outputs: + example_changed: + description: "Example Changed" + value: ${{ jobs.get-example-changed.outputs.example_changed }} + +jobs: + get-example-changed: + name: Get Example Changed + runs-on: ubuntu-latest + outputs: + example_changed: ${{ steps.set-example-changed.outputs.example_changed }} + steps: + - name: Checkout + uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - name: Get example files that changed + id: changed-files + uses: tj-actions/changed-files@v36 + with: + files: | + examples + !examples/cargo-make + !examples/gtk + !examples/Makefile.toml + !examples/README.md + + - name: List example files that changed + run: echo '${{ steps.changed-files.outputs.all_changed_files }}' + + - name: Set example_changed + id: set-example-changed + run: | + echo "example_changed=${{ steps.changed-files.outputs.any_changed }}" >> "$GITHUB_OUTPUT" diff --git a/.github/workflows/run-cargo-make-task.yml b/.github/workflows/run-cargo-make-task.yml index 8a7222943..52c2ffce4 100644 --- a/.github/workflows/run-cargo-make-task.yml +++ b/.github/workflows/run-cargo-make-task.yml @@ -9,6 +9,7 @@ on: cargo_make_task: required: true type: string + env: CARGO_TERM_COLOR: always CARGO_REGISTRIES_CRATES_IO_PROTOCOL: sparse @@ -26,11 +27,6 @@ jobs: steps: # Setup environment - - name: Install playwright browser dependencies - run: | - sudo apt-get update - sudo apt-get install libegl1 libvpx7 libevent-2.1-7 libopus0 libopengl0 libwoff1 libharfbuzz-icu0 libgstreamer-plugins-base1.0-0 libgstreamer-gl1.0-0 libhyphen0 libmanette-0.2-0 libgles2 gstreamer1.0-libav - - uses: actions/checkout@v3 - name: Setup Rust @@ -84,17 +80,35 @@ jobs: restore-keys: | ${{ runner.os }}-pnpm-store- - - name: Install Chrome Webriver + - name: Maybe install chromedriver run: | - sudo apt-get update - sudo apt-get install chromium-chromedriver + project_makefile=${{inputs.directory}}/Makefile.toml + webdriver_count=$(cat $project_makefile | grep "cargo-make/webdriver.toml" | wc -l) + if [ $webdriver_count -eq 1 ]; then + if ! command -v chromedriver &>/dev/null; then + echo chromedriver required + sudo apt-get update + sudo apt-get install chromium-chromedriver + else + echo chromedriver is already installed + fi + else + echo chromedriver is not required + fi + + - name: Maybe install playwright browser dependencies + run: | + playwright_count=$(find ${{inputs.directory}} -name playwright.config.ts | wc -l) + if [ $playwright_count -eq 1 ]; then + echo playwright required + sudo apt-get update + sudo apt-get install libegl1 libvpx7 libevent-2.1-7 libopus0 libopengl0 libwoff1 libharfbuzz-icu0 libgstreamer-plugins-base1.0-0 libgstreamer-gl1.0-0 libhyphen0 libmanette-0.2-0 libgles2 gstreamer1.0-libav + else + echo playwright is not required + fi # Run Cargo Make Task - name: ${{ inputs.cargo_make_task }} run: | - if [ "${{ inputs.directory }}" = "INTERNAL" ]; then - echo No verification required - else - cd ${{ inputs.directory }} - cargo make --profile=github-actions ${{ inputs.cargo_make_task }} - fi + cd ${{ inputs.directory }} + cargo make --profile=github-actions ${{ inputs.cargo_make_task }} diff --git a/examples/suspense_tests/README.md b/examples/suspense_tests/README.md index 64a797e95..6511c1440 100644 --- a/examples/suspense_tests/README.md +++ b/examples/suspense_tests/README.md @@ -78,4 +78,4 @@ cargo leptos watch # or cargo run... cargo make test-ui ``` -_See the [E2E README](./e2e/README.md) for more information about the testing strategy._ \ No newline at end of file +_See the [E2E README](./e2e/README.md) for more information about the testing strategy._ diff --git a/examples/suspense_tests/e2e/Makefile.toml b/examples/suspense_tests/e2e/Makefile.toml index b171babc7..cd76be24d 100644 --- a/examples/suspense_tests/e2e/Makefile.toml +++ b/examples/suspense_tests/e2e/Makefile.toml @@ -8,4 +8,13 @@ condition = { env_true = ["RUN_AUTOMATICALLY"] } [tasks.test-ui] command = "cargo" -args = ["test", "--test", "app_suite", "--", "--fail-fast", "${@}"] +args = [ + "test", + "--test", + "app_suite", + "--", + "--retry", + "2", + "--fail-fast", + "${@}", +]