Repository navigation
feat(frontend): add Turkish translation #36124
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Rotki CI | |
| on: | |
| pull_request: | |
| branches: | |
| - master | |
| - develop | |
| - bugfixes | |
| - feature/** | |
| push: | |
| branches: | |
| - master | |
| - develop | |
| - bugfixes | |
| - feature/** | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.head_ref || github.ref }} | |
| cancel-in-progress: true | |
| permissions: { } | |
| jobs: | |
| check-changes: | |
| name: 'Required job check' | |
| runs-on: ubuntu-latest | |
| outputs: | |
| backend_tasks: ${{ steps.checker.outputs.backend_tasks }} | |
| colibri_tasks: ${{ steps.checker.outputs.colibri_tasks }} | |
| starling_tasks: ${{ steps.checker.outputs.starling_tasks }} | |
| frontend_tasks: ${{ steps.checker.outputs.frontend_tasks }} | |
| e2e_tasks: ${{ steps.checker.outputs.e2e_tasks }} | |
| documentation_tasks: ${{ steps.checker.outputs.documentation_tasks }} | |
| test_environment: ${{ steps.checker.outputs.backend_environment }} | |
| permissions: | |
| contents: read | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| - name: Run check action | |
| uses: rotki/action-job-checker@c507ef41d38d78c43014d42175dc1725019f0c23 # v6.1.0 | |
| id: checker | |
| with: | |
| token: ${{ secrets.GITHUB_TOKEN }} | |
| config: | | |
| # yaml-language-server: $schema=https://raw.githubusercontent.com/rotki/action-job-checker/v6.1.0/schema.json | |
| groups: | |
| - name: frontend | |
| paths: [frontend] | |
| run_tag: run frontend | |
| implies: [e2e] | |
| - name: e2e | |
| run_tag: run e2e | |
| - name: backend | |
| paths: | |
| - rotkehlchen | |
| - pyproject.toml | |
| - .github/workflows/task_backend_tests.yml | |
| run_tag: run backend | |
| skip_tag: skip py tests | |
| environments: | |
| - tag: run nft py tests | |
| value: nfts | |
| - tag: run all py tests | |
| value: nightly | |
| - name: colibri | |
| # The colibri tests read the packaged global database, so a new asset list has to | |
| # run them too. Leaving it out let a shipped asset break them for six days. | |
| paths: [colibri, Cargo.toml, Cargo.lock, rotkehlchen/data/global.db] | |
| - name: starling | |
| paths: [crates, Cargo.toml, Cargo.lock] | |
| - name: documentation | |
| paths: [docs] | |
| check-typos: | |
| name: 'Check Typos' | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: read | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| - name: Run typos checker | |
| uses: crate-ci/typos@512fc24f32f44ab01972217aaaf3dc86ec234d53 # v1.50.2 | |
| code-analyze-frontend: | |
| name: 'Code analyze frontend' | |
| needs: [ 'check-changes', 'check-typos' ] | |
| permissions: | |
| actions: read | |
| contents: read | |
| security-events: write | |
| if: ${{ needs.check-changes.outputs.frontend_tasks }} | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| - name: Initialize CodeQL | |
| uses: github/codeql-action/init@1c5b675653bb5c22dbe9b12b556ec555138e09fd # v4.38.1 | |
| with: | |
| languages: 'javascript' | |
| - name: Autobuild | |
| uses: github/codeql-action/autobuild@1c5b675653bb5c22dbe9b12b556ec555138e09fd # v4.38.1 | |
| - name: Perform CodeQL Analysis | |
| uses: github/codeql-action/analyze@1c5b675653bb5c22dbe9b12b556ec555138e09fd # v4.38.1 | |
| with: | |
| category: "/language:javascript" | |
| lint-frontend: | |
| name: 'Frontend checks' | |
| needs: [ 'check-changes', 'check-typos' ] | |
| if: ${{ needs.check-changes.outputs.frontend_tasks }} | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: read | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| fetch-depth: 2 | |
| persist-credentials: false | |
| - name: Load env | |
| uses: rotki/action-env@49f59e650cfdc8796c4ac6533ec044b190d83f9a # v4.0.0 | |
| with: | |
| env_file: .github/.env.ci | |
| - name: Setup pnpm | |
| uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0 | |
| with: | |
| package_json_file: frontend/package.json | |
| - name: Setup node | |
| uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 | |
| with: | |
| node-version-file: 'frontend/.nvmrc' | |
| cache: 'pnpm' | |
| cache-dependency-path: 'frontend/pnpm-lock.yaml' | |
| - name: Install dependencies | |
| id: install | |
| working-directory: ./frontend | |
| run: pnpm install --frozen-lockfile | |
| # Each check is its own step so the failure annotation names what actually broke: a | |
| # vue-tsc error reports as "Typecheck", not as a generic lint failure. The condition | |
| # keeps later checks running after an earlier one fails, so a single run reports every | |
| # problem, while still skipping them all if the install itself never succeeded. | |
| - name: Typecheck | |
| if: ${{ steps.install.outcome == 'success' && github.event_name != 'push' }} | |
| working-directory: ./frontend | |
| run: pnpm run typecheck | |
| - name: Build | |
| if: ${{ !cancelled() && steps.install.outcome == 'success' && github.event_name != 'push' }} | |
| working-directory: ./frontend | |
| run: pnpm run --filter rotki build:app | |
| - name: Check bundle placement | |
| if: ${{ !cancelled() && steps.install.outcome == 'success' && github.event_name != 'push' }} | |
| working-directory: ./frontend | |
| run: pnpm run --filter rotki check:bundle | |
| - name: ESLint | |
| if: ${{ !cancelled() && steps.install.outcome == 'success' }} | |
| working-directory: ./frontend | |
| run: pnpm run lint | |
| - name: Stylelint | |
| if: ${{ !cancelled() && steps.install.outcome == 'success' }} | |
| working-directory: ./frontend | |
| run: pnpm run lint:style | |
| - name: Linked i18n keys | |
| if: ${{ !cancelled() && steps.install.outcome == 'success' }} | |
| working-directory: ./frontend | |
| run: pnpm run --filter rotki check:linked-keys | |
| # Runs from the workspace root, not from app: the catalog it resolves | |
| # `catalog:` versions against lives in frontend/pnpm-workspace.yaml. | |
| - name: Knip | |
| if: ${{ !cancelled() && steps.install.outcome == 'success' }} | |
| working-directory: ./frontend | |
| run: pnpm run knip | |
| # The app typecheck filters to `rotki`, so the dev-proxy is only covered here. | |
| - name: dev-proxy | |
| if: ${{ !cancelled() && steps.install.outcome == 'success' }} | |
| working-directory: ./frontend | |
| run: pnpm run test:proxy | |
| check-backend-mapping-keys: | |
| name: 'Backend mapping keys' | |
| needs: [ 'check-changes' ] | |
| # Runs on backend changes too, unlike the other frontend jobs. The generated key list is scraped | |
| # from the Python enums, so a backend-only PR that adds or renames an event type is exactly what | |
| # makes it stale, and gating this on frontend_tasks alone would never catch that case. | |
| if: ${{ needs.check-changes.outputs.frontend_tasks || needs.check-changes.outputs.backend_tasks }} | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: read | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| - name: Setup pnpm | |
| uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0 | |
| with: | |
| package_json_file: frontend/package.json | |
| - name: Setup node | |
| uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 | |
| with: | |
| node-version-file: 'frontend/.nvmrc' | |
| cache: 'pnpm' | |
| cache-dependency-path: 'frontend/pnpm-lock.yaml' | |
| - name: Install dependencies | |
| working-directory: ./frontend | |
| run: pnpm install --frozen-lockfile | |
| - name: Check the generated backend mapping keys are current | |
| working-directory: ./frontend | |
| run: pnpm run --filter rotki check:backend-strings | |
| unittest-frontend: | |
| name: 'Frontend unit tests' | |
| needs: [ 'check-changes' ] | |
| if: ${{ github.event_name != 'push' && needs.check-changes.outputs.frontend_tasks }} | |
| uses: ./.github/workflows/task_fe_unit_tests.yml | |
| permissions: | |
| contents: read | |
| secrets: | |
| CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} | |
| docs: | |
| name: 'Documentation build' | |
| needs: [ 'check-changes', 'check-typos' ] | |
| if: ${{ github.event_name != 'push' && needs.check-changes.outputs.documentation_tasks }} | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: read | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| - name: Load env | |
| uses: rotki/action-env@49f59e650cfdc8796c4ac6533ec044b190d83f9a # v4.0.0 | |
| with: | |
| env_file: .github/.env.ci | |
| - name: Setup python | |
| uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 | |
| with: | |
| python-version: ${{ env.PYTHON_VERSION }} | |
| freethreaded: true | |
| cache: 'pip' | |
| - name: Install uv | |
| uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0 | |
| with: | |
| enable-cache: true | |
| prune-cache: true | |
| version: ${{ env.UV_VERSION }} | |
| cache-dependency-glob: "uv.lock" | |
| - name: Install dependencies | |
| run: uv sync --locked --group docs | |
| - name: Build html docs | |
| run: cd docs && uv run make html | |
| code-analyze-backend: | |
| name: 'Code analyze backend' | |
| needs: [ 'check-changes', 'check-typos' ] | |
| permissions: | |
| actions: read | |
| contents: read | |
| security-events: write | |
| if: ${{ needs.check-changes.outputs.backend_tasks }} | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| - name: Initialize CodeQL | |
| uses: github/codeql-action/init@1c5b675653bb5c22dbe9b12b556ec555138e09fd # v4.38.1 | |
| with: | |
| languages: 'python' | |
| - name: Autobuild | |
| uses: github/codeql-action/autobuild@1c5b675653bb5c22dbe9b12b556ec555138e09fd # v4.38.1 | |
| - name: Perform CodeQL Analysis | |
| uses: github/codeql-action/analyze@1c5b675653bb5c22dbe9b12b556ec555138e09fd # v4.38.1 | |
| with: | |
| category: "/language:python" | |
| lint-colibri: | |
| name: 'Colibri lint and test' | |
| needs: [ 'check-changes', 'check-typos' ] | |
| if: ${{ github.event_name != 'push' && needs.check-changes.outputs.colibri_tasks }} | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: read | |
| steps: | |
| - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| - uses: dtolnay/rust-toolchain@b2d072a15ba9e799dbc505c707140d9f33237405 # clippy | |
| with: | |
| toolchain: 1.91 | |
| components: clippy | |
| - uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2.9.2 | |
| with: | |
| cache-on-failure: true | |
| workspaces: | | |
| . -> target | |
| - name: Fetch Rust dependencies | |
| run: cargo fetch --locked | |
| - run: cargo check -p colibri --locked && cargo clippy -p colibri --all-targets --locked | |
| env: | |
| RUSTFLAGS: -Dwarnings | |
| - run: cargo test -p colibri --locked | |
| env: | |
| RUSTFLAGS: -Dwarnings | |
| lint-starling: | |
| name: 'Starling lint and test' | |
| needs: [ 'check-changes', 'check-typos' ] | |
| if: ${{ github.event_name != 'push' && needs.check-changes.outputs.starling_tasks }} | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: read | |
| steps: | |
| - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| - uses: dtolnay/rust-toolchain@b2d072a15ba9e799dbc505c707140d9f33237405 # clippy | |
| with: | |
| toolchain: 1.91 | |
| components: clippy, rustfmt | |
| - uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2.9.2 | |
| with: | |
| cache-on-failure: true | |
| workspaces: | | |
| . -> target | |
| - name: Fetch Rust dependencies | |
| run: cargo fetch --locked | |
| - run: cargo fmt --all --check | |
| - run: cargo check --workspace --exclude colibri --locked && cargo clippy --workspace --exclude colibri --all-targets --locked | |
| env: | |
| RUSTFLAGS: -Dwarnings | |
| - run: cargo test --workspace --exclude colibri --locked | |
| env: | |
| RUSTFLAGS: -Dwarnings | |
| test-starling-windows: | |
| name: 'Starling windows lifecycle tests' | |
| needs: [ 'check-changes', 'check-typos' ] | |
| if: ${{ github.event_name != 'push' && needs.check-changes.outputs.starling_tasks }} | |
| # The only job on a windows runner: the cross-platform suite already runs on | |
| # ubuntu in lint-starling, so this runs *only* the windows-specific target. | |
| # Those tests cover console-ctrl delivery and CREATE_NEW_PROCESS_GROUP | |
| # isolation, which cannot be exercised anywhere but windows. | |
| runs-on: windows-latest | |
| permissions: | |
| contents: read | |
| steps: | |
| - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| - name: Load env | |
| uses: rotki/action-env@49f59e650cfdc8796c4ac6533ec044b190d83f9a # v4.0.0 | |
| with: | |
| env_file: .github/.env.ci | |
| - uses: dtolnay/rust-toolchain@b2d072a15ba9e799dbc505c707140d9f33237405 # clippy | |
| with: | |
| toolchain: 1.91 | |
| - uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2.9.2 | |
| with: | |
| cache-on-failure: true | |
| workspaces: | | |
| . -> target | |
| - name: Setup python | |
| uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 | |
| with: | |
| python-version: ${{ env.PYTHON_VERSION }} | |
| freethreaded: true | |
| - name: Install uv | |
| uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0 | |
| with: | |
| enable-cache: true | |
| prune-cache: true | |
| version: ${{ env.UV_VERSION }} | |
| cache-dependency-glob: "uv.lock" | |
| - name: Fetch Rust dependencies | |
| run: cargo fetch --locked | |
| # A regression in the process-group isolation makes the Ctrl+C under test | |
| # escape to the shared console and take the harness down with it, so a | |
| # failure here can surface as a killed job rather than a failed assertion. | |
| - run: cargo test -p starling-core --locked --test windows_lifecycle | |
| env: | |
| RUSTFLAGS: -Dwarnings | |
| # The pyinstaller tree test is #[ignore]d because it needs this bundle, so | |
| # it only ever runs where we build it. It guards the ghost-process case: | |
| # pyinstaller's bootloader forks a child, and only the Job Object reaps it. | |
| # `--with` keeps pyinstaller out of the project env (it is not a project dep). | |
| - name: Build the pyinstaller fixture bundle | |
| run: > | |
| uv run --no-sync --with pyinstaller==${{ env.PYINSTALLER_VERSION }} pyinstaller | |
| --onedir --noconfirm --clean | |
| --name fake_bootloader_pyi | |
| --distpath target/pyi/dist | |
| --workpath target/pyi/build | |
| --specpath target/pyi | |
| crates/starling-core/tests/support/fake_bootloader.py | |
| - run: cargo test -p starling-core --locked --test process_tree_python_bundle -- --ignored | |
| env: | |
| RUSTFLAGS: -Dwarnings | |
| lint-backend: | |
| name: 'Backend lint' | |
| needs: [ 'check-changes', 'check-typos' ] | |
| if: ${{ github.event_name != 'push' && needs.check-changes.outputs.backend_tasks }} | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: read | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: | |
| persist-credentials: false | |
| fetch-depth: 0 # full history so the diff-scoped logging lint can reach the PR base | |
| - name: Load env | |
| uses: rotki/action-env@49f59e650cfdc8796c4ac6533ec044b190d83f9a # v4.0.0 | |
| with: | |
| env_file: .github/.env.ci | |
| - name: Setup python | |
| uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 | |
| with: | |
| python-version: ${{ env.PYTHON_VERSION }} | |
| freethreaded: true | |
| cache: 'pip' | |
| - name: Install uv | |
| uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0 | |
| with: | |
| enable-cache: true | |
| prune-cache: true | |
| version: ${{ env.UV_VERSION }} | |
| cache-dependency-glob: "uv.lock" | |
| - name: Cache find-duplicate-constants binary | |
| id: fdc-cache | |
| uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 | |
| with: | |
| path: tools/find-duplicate-constants/target/release/find-duplicate-constants | |
| key: ${{ runner.os }}-find-duplicate-constants-${{ hashFiles('tools/find-duplicate-constants/Cargo.lock', 'tools/find-duplicate-constants/Cargo.toml', 'tools/find-duplicate-constants/src/**') }} | |
| - name: Setup Rust | |
| if: steps.fdc-cache.outputs.cache-hit != 'true' | |
| uses: dtolnay/rust-toolchain@6bed0761d98439e5a578e2877258200ad565ba87 # stable | |
| with: | |
| toolchain: 1.91 | |
| - name: Cache Rust dependencies | |
| if: steps.fdc-cache.outputs.cache-hit != 'true' | |
| uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2.9.2 | |
| with: | |
| cache-on-failure: true | |
| workspaces: tools/find-duplicate-constants | |
| - name: Build find-duplicate-constants | |
| if: steps.fdc-cache.outputs.cache-hit != 'true' | |
| working-directory: ./tools/find-duplicate-constants | |
| run: cargo build --release | |
| - name: Install dependencies | |
| run: uv sync --locked --group lint | |
| - name: Lint | |
| env: | |
| LINT_DIFF_BASE: ${{ github.event.pull_request.base.sha }} # diff-scoped logging lint base | |
| run: uv run make lint | |
| test-backend: | |
| if: ${{ github.event_name != 'push' && needs.check-changes.outputs.backend_tasks }} | |
| needs: [ 'lint-backend', 'check-changes' ] | |
| uses: ./.github/workflows/task_backend_tests.yml | |
| with: | |
| os: ubuntu-22.04 | |
| test_environment: ${{needs.check-changes.outputs.test_environment}} | |
| secrets: | |
| CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} | |
| permissions: | |
| contents: read | |
| test-contract: | |
| # Non-required drift detector: validates live backend responses against the | |
| # frontend api composables (full fetch + transform + zod pipeline) on a | |
| # golden profile. Deliberately not part of the 'done' success check. | |
| name: 'API contract tests' | |
| needs: [ 'check-changes' ] | |
| if: ${{ github.event_name != 'push' && (needs.check-changes.outputs.backend_tasks || needs.check-changes.outputs.frontend_tasks) }} | |
| uses: ./.github/workflows/task_contract_tests.yml | |
| permissions: | |
| contents: read | |
| test-e2e: | |
| name: 'Frontend e2e tests' | |
| needs: check-changes | |
| if: ${{ github.event_name != 'push' && needs.check-changes.outputs.e2e_tasks }} | |
| uses: ./.github/workflows/task_e2e_tests.yml | |
| secrets: | |
| CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} | |
| ETHERSCAN_API_KEY: ${{ secrets.ETHERSCAN_API_KEY }} | |
| permissions: | |
| contents: read | |
| done: | |
| name: 'Success check' | |
| if: ${{ always() }} | |
| needs: [ 'check-changes', 'lint-frontend', 'check-backend-mapping-keys', 'unittest-frontend', 'docs', 'lint-colibri', 'lint-starling', 'test-starling-windows', 'lint-backend', 'test-backend', 'test-e2e' ] | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Check if any task failed | |
| run: | | |
| if echo "${RESULT}" | jq -e '.[] | select(. == "failure")' > /dev/null 2>&1; then | |
| echo "::error::At least one required task failed" | |
| exit 1 | |
| fi | |
| env: | |
| RESULT: ${{ toJSON(needs.*.result) }} |